All Recipe Makeovers

We Scored the Viral French Onion Pasta - Then Found the 15 Points Nobody Looks For

Recipe Makeover
We Scored the Viral French Onion Pasta - Then Found the 15 Points Nobody Looks For

French onion pasta is the internet's best idea in years: take the forty minutes of deeply caramelized onions that make French onion soup worth making, then cook the pasta right in the beef broth so it drinks up all of it, and finish the whole thing with Gruyere. One pot. No colander. The version everyone makes traces back to Carolyn Stilwell, who posted it as @carolbeecooks in January 2022 and wrote that she had never had so many people ask for a recipe so quickly. It has been rebuilt by every food blog since, usually with the Parmesan and half-and-half of her original swapped up to Gruyere and heavy cream.

We ran that richer, more-shared version through our Nutrition Score and got 36 out of 100. Then we rebuilt it to 71, with 9.3 g of fiber a serving instead of 3.6, 78% less sodium, and 6.4 g less saturated fat. It is still a one-pot pan of jammy onions, beef broth, and melted Gruyere.

The surprise was where the 35 points came from. Halving the Gruyere was worth zero points. Swapping the heavy cream out was worth zero points. The single biggest change in the entire makeover was the carton of broth, which costs you nothing at the table and which almost nobody thinks of as an ingredient.

The viral version: what is in it and how it scores

The build we scored, serving four out of one pan:

  • 2 tablespoons butter and 1 tablespoon olive oil
  • 2 large yellow onions, thinly sliced
  • 4 cloves garlic and 1 teaspoon thyme
  • 1/4 cup dry white wine, 1 tablespoon balsamic vinegar, 1 tablespoon Worcestershire sauce
  • 8 oz rigatoni
  • 4 cups beef broth
  • 5.3 oz Gruyere (the standard package) and 1/4 cup Parmesan
  • 1/4 cup heavy cream
  • About 1/2 teaspoon salt, between the pinch on the onions and the seasoning at the end

Per serving that lands at 597 calories, 24.9 g of protein, 15.3 g of saturated fat, 1,850 mg of sodium, and 3.6 g of fiber.

Start with what is already good, because there is more of it than you would guess. One serving carries 66% of a day's phosphorus, 63% of folate, 52% of calcium, 49% of thiamine, 41% of iron, 39% of niacin, and 31% of a day's protein. Onions cooked for forty minutes are not a garnish, and beef broth and cheese are real food. This is not junk.

Two things drag it to 36, and they are both flagged at the score's highest caution level:

  • Sodium: 1,850 mg per serving, 81% of a day's limit. The 2,300 mg daily ceiling is nearly gone in one bowl of pasta, and most Americans are already running at about 3,400 mg a day. In the TOHP follow-up study, people staying under 2,300 mg had a 32% lower risk of cardiovascular disease than those in the 3,600 to 4,800 mg range.
  • Saturated fat: 15.3 g per serving, 65% of a day's worth. The Dietary Guidelines put the ceiling at under 10% of calories, and the American Heart Association at no more than 7%. One serving is most of a day either way.

Underneath those: 1.5 different plants in the whole pan, and 3.6 g of fiber, about 12% of a day. The dish is essentially two ingredient groups, onion and dairy, wrapped around refined pasta.

Here is the thing about the sodium that makes this dish different from every other pasta. In normal pasta you salt a big pot of water, cook the noodles, and pour most of that salt down the drain. In a one-pot pasta the cooking liquid is the sauce. Nothing gets poured off. Every milligram in that carton ends up in a bowl. We scored a cup of each kind of beef broth on its own: regular is 890 mg of sodium a cup, so four cups puts 3,560 mg into the pan before you have seasoned anything. Even with zero added salt, the original still scores 36 and still sits at 1,340 mg a serving. The carton alone does it.

The upgrades: seven swaps, 35 points

Each swap below is scored on top of the one before it, in the order we made them, so the deltas add up to the real total. If you are only going to change one thing, skip to number seven. It looks small until it isn't, and the reason why is the most useful thing in this post.

1. Whole wheat rigatoni

  • Swap: 8 oz rigatoni → 8 oz whole wheat rigatoni
  • Score impact: +8 points (36 to 44)
  • What it changes: Fiber from 3.6 g to 7.0 g, plants from 1.5 to 2.5, magnesium and B vitamins up
  • What it costs you: A firmer, nuttier noodle. This sauce hides it better than almost any other.

The biggest single-swap gain in the makeover, and it is a one-for-one substitution you make at the store. Nearly doubling the fiber in one move matters: a meta-analysis found people eating 70 g of whole grains a day had a 22% lower risk of total mortality. And a sauce built on caramelized onion, beef broth, and Worcestershire is exactly the kind of dark, savory, slightly sweet coating that swallows whole wheat's nuttiness whole.

One technique note specific to one-pot cooking: whole wheat pasta drinks more liquid than white. Keep a mug of hot water next to the stove and loosen the pan if it tightens before the noodles are done. Our pasta substitutes guide ranks the other options if whole wheat is a hard no in your house.

2. Half a pound of mushrooms

  • Swap: Add 8 oz cremini mushrooms, sliced and browned with the onions
  • Score impact: +3 points (44 to 47)
  • What it changes: Plants from 2.5 to 3.5, protein up to 27.1 g, fiber to 8.0 g
  • What it costs you: Nothing. It makes the pan taste more like beef, not less.

Mushrooms are loaded with glutamates, the same savory signal your tongue reads from long-simmered stock, which is why they belong in a dish whose whole flavor argument is depth. They also add volume, so the same pan feeds four people more generously.

Brown them properly or do not bother. Cook them hard in a nearly dry pan until they have released their water, the water has fully boiled off, and they start to color. Added wet, they stew and turn gray. One aside worth knowing: the finished dish still flags low vitamin D, and mushrooms are the one ingredient here that can fix it. Dark-grown button and cremini mushrooms carry less than 40 IU per 3.5-ounce serving, but sunlight-exposed ones reach up to 400 IU. If your store sells UV-exposed mushrooms, buy those.

3. A third onion, a bag of spinach, and a handful of parsley

  • Swap: 2 large onions → 3 large onions, plus 4 oz baby spinach wilted in at the end and 1/4 cup chopped parsley
  • Score impact: +7 points (47 to 54)
  • What it changes: Plants from 3.5 to 4.75, fiber to 9.3 g, vitamin K becomes the dish's top strength
  • What it costs you: Ten more minutes of slicing, and some green flecks in a brown dish

The onions are the dish, so they were never going to be cut. They went up instead. Onions are also the reason this recipe was ever going to score respectably on gut health: their main fiber is fructans, which behave as a prebiotic. A 2024 study in mSystems fermented onion extract with human gut microbiota and found short-chain-fatty-acid-producing bacteria enriched and butyrate significantly elevated.

The spinach is the honest compromise in the post. Four ounces looks absurd raw and collapses to almost nothing in the residual heat, but you will see it, and French onion pasta is not traditionally green. We kept it because it is worth 7 points together with the parsley and the extra onion, and because dropping both greens from the finished recipe costs 7 points on its own. Going from 1.5 plants to 4.75 also moves this dish meaningfully toward the 30 different plants a week that the largest gut microbiome study to date associated with more diverse gut bacteria.

4. Evaporated milk instead of heavy cream

  • Swap: 1/4 cup heavy cream → 1/3 cup evaporated milk
  • Score impact: +0 points (54 to 54)
  • What it changes: Saturated fat from 15.4 g to 13.2 g, protein up to 29.4 g
  • What it costs you: Nothing you will notice under this much onion and cheese

Zero points. Two full grams of saturated fat off every serving and the score did not move a millimeter, because at this stage saturated fat was still sitting at 56% of a day's worth, deep inside the highest caution band. The score could not see the improvement. Hold that thought.

Evaporated milk is the right technical choice here regardless of what the number said. It is milk concentrated to about half its volume, so a third of a cup carries roughly the creaminess of two-thirds of a cup of milk, and the heat treatment it goes through in the can makes its proteins far more resistant to curdling than fresh dairy. In a hot pan of starchy pasta, that reliability is the whole point. Our heavy cream substitutes guide covers the rest of the field.

5. Three ounces of Gruyere instead of five

  • Swap: 5.3 oz Gruyere → 3 oz Gruyere (the Parmesan stays)
  • Score impact: +0 points (54 to 54)
  • What it changes: Saturated fat from 13.2 g to 10.2 g, 67 calories off the serving
  • What it costs you: A slightly less blanketing melt. Grate it fine and you get it back.

Also zero. The swap everyone would name first, the one that takes three grams of saturated fat out of every serving, moved the score by nothing at all. We even tested it on the untouched original in isolation: cutting the Gruyere nearly in half, on its own, is worth one point.

Real Gruyere stays because a smaller amount of a strongly flavored aged cheese beats a larger amount of a mild one, and because it is the ingredient that makes this French onion pasta rather than creamy pasta. Grate it on the fine side of the box grater and stir it in off the heat so it melts into the sauce instead of stringing into clumps.

6. One tablespoon of butter instead of two

  • Swap: 2 tablespoons butter → 1 tablespoon butter plus 1 1/2 tablespoons olive oil
  • Score impact: +2 points (54 to 56)
  • What it changes: Saturated fat from 10.2 g to 8.8 g
  • What it costs you: Very little. The butter is still there in the browning.

Onions caramelize just as happily in olive oil, and olive oil holds up better over forty minutes on the stove without browning past the point you want. Keeping one tablespoon of butter is a deliberate choice rather than an oversight, and we can price it exactly: drop that last tablespoon and go all olive oil and the finished dish scores 76 instead of 71. Five points for one tablespoon across four servings. We think the butter earns it in a French onion anything, but now you can decide for yourself. Our butter substitutes guide has the full ranking.

7. Unsalted beef broth, and no added salt

  • Swap: 4 cups regular beef broth plus 1/2 teaspoon salt → 4 cups unsalted beef broth, no added salt
  • Score impact: +15 points (56 to 71)
  • What it changes: Sodium from 1,770 mg to 400 mg per serving, 77% of a day's limit down to 17%
  • What it costs you: You have to buy the right carton, and season with acid and pepper instead of salt

Here is where the zeros get paid back. This one swap is worth more than the previous six combined, and it changes nothing you can see on the plate.

The reason the earlier swaps read as nothing is thresholds. Sodium sat above 75% of a day's limit through all six of them, pinned at the score's highest caution level, and saturated fat was up there beside it for most of that run. Shaving grams off inside a band the score has already maxed out buys you nothing. It takes the pasta, the mushrooms, the plants, the milk, the cheese, and the butter clearing the way before the sodium fix has anywhere to land, and then it cashes in fifteen points at once. Make this swap first, on the untouched original, and it is worth five.

Two practical warnings, both of which cost real points. First, low-sodium is not low enough here. We scored all three cartons on their own: regular beef broth is 890 mg a cup, low-sodium is 620 mg, unsalted is 40 mg. Low-sodium only takes about 30% off, and in a dish that absorbs four cups of it, that is not close to enough. Build the finished recipe with low-sodium broth instead of unsalted and it scores 58 rather than 71. Thirteen points, for the wrong carton.

Second, be careful salting at the end. Stir in a scant 1/4 teaspoon and the dish drops to 68. Stir in 1/2 teaspoon and it drops to 59. Season with black pepper, an extra splash of balsamic, and the Parmesan first, and taste before you reach for the salt cellar. Our broth substitutes guide goes deeper on the rule this dish illustrates: anything that reduces or absorbs its liquid concentrates every milligram you put in at the start.

Take the Guesswork Out of Eating Well

Eat Well Planner helps you organize your favorite recipes, plan balanced meals, and automatically generate shopping lists — all in one place. Whether you're tracking macros, managing dietary restrictions, or just trying to stop asking "what's for dinner?", we've got you covered.

Our AI-powered tools can adapt any recipe to your dietary needs, help you discover new meals you'll love, and even log your nutrition effortlessly. It's meal planning made simple.

Start Organizing Your Meals — Free

What we kept, and where we stopped

We kept real Gruyere, real Parmesan, real butter, the white wine (a quarter cup across four servings is a rounding error nutritionally, and it is doing real work on the fond), the Worcestershire, and a full half pound of pasta. Nothing here is a cauliflower situation, and nothing in the finished pan is a substitute pretending to be the thing.

The cheese is where we stopped, and the score shows both directions of that dial. Take the Gruyere out entirely and the pan scores 81, ten points above ours. It also drops from 25.9 g of protein a serving to 19.5 g, and it stops being French onion pasta. Put the full 5.3 oz package back into the finished recipe and it falls to 65. Three ounces is our answer, but now you know what each turn costs.

The same test is worth running on the two swaps that scored zero in the build. Put the heavy cream back into the finished recipe and it drops from 71 to 65. Put the full Gruyere back and it also drops to 65. Six points each, in the finished dish, for swaps that were worth nothing when we made them. They were never useless. They were just early.

The healthier French onion pasta: full recipe

Final Nutrition Score: 71/100. Serves 4. About 15 minutes of prep and 70 minutes on the stove, most of it the onions doing their own thing.

  • 1 tablespoon unsalted butter
  • 1 1/2 tablespoons extra virgin olive oil
  • 3 large yellow onions (about 1 lb 2 oz), thinly sliced
  • 8 oz cremini mushrooms, sliced
  • 4 cloves garlic, minced
  • 1 teaspoon dried thyme, or 1 tablespoon fresh thyme leaves
  • 1/4 cup dry white wine
  • 1 tablespoon balsamic vinegar
  • 1 tablespoon Worcestershire sauce
  • 8 oz whole wheat rigatoni
  • 4 cups unsalted beef broth
  • 1/3 cup evaporated milk
  • 3 oz Gruyere, finely grated (about 3/4 cup packed)
  • 1/4 cup finely grated Parmesan
  • 4 oz baby spinach
  • 1/4 cup chopped fresh parsley
  • Plenty of coarsely ground black pepper
  1. Melt the butter with the olive oil in a large Dutch oven or deep skillet over medium-low heat. Add the onions and cook, stirring every few minutes, until deep brown and jammy, 40 to 45 minutes. This is not a place to hurry, and recipes that promise caramelized onions in ten are not telling you the truth. If they catch, add a splash of water and scrape the bottom.
  2. Push the onions to one side, raise the heat to medium-high, and add the mushrooms. Cook until they have given up their water, the pan is dry again, and they are browning, 8 to 10 minutes, then stir everything together.
  3. Add the garlic and thyme and cook 1 minute, until fragrant.
  4. Pour in the wine and balsamic vinegar and scrape up everything stuck to the bottom of the pan. Simmer until almost fully evaporated, 1 to 2 minutes.
  5. Add the Worcestershire sauce, the rigatoni, and the beef broth. Bring to a boil, then reduce to a steady simmer and cook, partly covered and stirring often so nothing sticks, until the pasta is al dente and the liquid has reduced to a loose sauce, 12 to 16 minutes. Whole wheat pasta drinks more than white, so add hot water a splash at a time if the pan tightens early.
  6. Take the pan off the heat. Stir in the evaporated milk, then the Gruyere and Parmesan, until melted and glossy. Off the heat is what keeps the sauce smooth.
  7. Add the spinach a few handfuls at a time and stir until wilted in the residual heat, about 2 minutes.
  8. Stir in the parsley and a lot of black pepper. Taste. If it truly needs salt, add it a pinch at a time and know that a scant 1/4 teaspoon across the pan costs 3 points.

How one serving compares, viral version versus this one:

  • Nutrition Score: 36 → 71
  • Calories: 597 → 519
  • Sodium: 1,850 mg → 400 mg (81% → 17% of the daily limit)
  • Saturated fat: 15.3 g → 8.8 g (65% → 37% of a day's worth)
  • Fiber: 3.6 g → 9.3 g (12% → 32% of a day's worth)
  • Protein: 24.9 g → 25.9 g
  • Different plants: 1.5 → 4.75

Sodium is now off the caution list completely, and saturated fat has dropped from the highest band to merely high, which is an honest ceiling for a dish with Gruyere in the name. The finished pan is an excellent source of vitamin K (168% of a day's worth), phosphorus, iron, riboflavin, niacin, biotin, calcium, vitamin B6, magnesium, folate, zinc, potassium, protein, and fiber. The gut health sub-score went from 30 to 72 and heart health from 32 to 68.

Swaps we tested and skipped

Greek yogurt instead of evaporated milk. This scored 75, four points above ours, and it is a legitimate option rather than a rejection. We left it out of the main recipe because it is fragile: fat is what keeps protein strands from clumping when yogurt is heated, so low-fat versions split into something grainy. If you want the four points, use full-fat Greek yogurt, take the pan fully off the heat, and temper it with a few spoonfuls of the hot sauce before it goes in.

A can of white beans. Stirring 250 g of drained canned cannellini beans into the finished pan scores 75, and takes protein to 30.5 g and fiber to 13.6 g a serving. It is a genuine upgrade and we would happily eat it. It also stops being the dish people came for, so it is a variation rather than the recipe.

Plain 2% milk instead of evaporated. Scored 74, three points above ours, but a third of a cup of milk is half the dairy solids of a third of a cup of evaporated milk, so the sauce comes out noticeably thinner and it is more likely to split. Three points is not worth a broken sauce.

Low-sodium broth as a compromise. Covered above and worth repeating, because it is the mistake this recipe punishes hardest. It costs 13 points against unsalted, and it is the same amount of effort at the store.

Make it fit other diets

For a vegetarian pan, swap the unsalted beef broth for unsalted vegetable broth, drop the Worcestershire for a teaspoon of soy sauce or a splash of extra balsamic, and lean harder on the mushrooms. For gluten-free, use a brown rice or lentil rigatoni and cut the simmer by two to three minutes, since gluten-free pasta goes from firm to mush quickly in a one-pot cook. For dairy-free, this one is hard to fake honestly, and we would rather point you to a different recipe than pretend cashew cream tastes like aged Gruyere. In Eat Well Planner you do not have to work any of this out by hand: ask the AI to rewrite this recipe as vegetarian or gluten-free and it hands back the full ingredient list and steps with the swaps already worked in.

Do this to any recipe you love

We would have written the wrong article without the numbers. Every instinct said the cheese and the cream were the problem. Cutting both was worth zero points, and a carton of broth nobody thinks about was worth fifteen.

Every score and delta in this post came from Eat Well Planner's Make It Healthier tool, which proposes swaps for any recipe and runs a calculator to verify the real nutritional gain before showing you the suggestion, so the ones worth nothing get caught rather than published. We watched each swap move the number in the Recipe Playground, where you change one ingredient and see the score update live with a delta for that edit. Want to keep the full package of Gruyere and make it up somewhere else? Try it there and see exactly what it costs.

You can do this to your own food. Saw it on TikTok? Paste the video link straight into the app, and it pulls out the ingredients and steps, scores the recipe, tells you what is dragging the number down, and shows you which changes would move it and by how much, before you turn the stove on. We gave million dollar spaghetti and the viral baked feta pasta the same treatment.

Weekly Tips, Free Forever

Eat Better Without
Overthinking It

More viral recipes scored and rebuilt — plus gut-friendly recipes and meal plans worth cooking.