The best sweet and sour salmon I ever ate came out of a borrowed oven in a rental apartment, ten minutes after I gave up on making it nice. The fish was slightly too thick, the sauce was a hasty pour of whatever vinegary things lived in the door of the fridge, and the broiler ran hotter than the dial claimed. None of that mattered. The skin crackled, the flesh stayed translucent in the center, and the syrupy glaze pooled under the fish and soaked into the rice. I have been chasing that result on purpose ever since.
The pain point most home cooks hit with salmon is the opposite one: limp skin and a sauce that sits on top instead of clinging. If you have ever lifted a filet and watched the skin slide off in a gray, gelatinous sheet, this recipe is the fix. It leans on two things the oven does well that a pan struggles with: even radiant heat from above, and a shallow bath of sauce that reduces while the fish cooks, instead of being stirred up at the end.
At a glance. Skin-on salmon filets rest in a warm sweet-sour glaze (rice vinegar, ketchup, light soy, Shaoxing wine, sugar, white pepper) for 10 minutes, then broil with the fan on at 220°C / 425°F, skin up, about 4 in / 10 cm from the element. Done in roughly 10 minutes, when the skin blisters golden and the center reads 50-55°C / 120-130°F for medium. The one non-negotiable: skin must be dry, oiled, and salted before it goes in.
What this dish is, and where the flavor comes from
Sweet and sour is one of the oldest templates in the Chinese kitchen, and it is not one flavor so much as a balance you tune to the protein. The classic pairing for pork, as in Sweet and Sour Ribs or Sweet and Sour Meatballs, leans on a darker, deeper sour from aged black rice vinegar, which carries a malty, almost smoky edge that stands up to rich meat. For delicate fish the same dark vinegar is too heavy. You want a brighter, cleaner acid.
That is where white rice vinegar and tomato ketchup come in. The vinegar supplies a sharp, clean tang; the ketchup does two jobs at once, adding a rounded tomato sweetness and the brick-red color the dish is famous for. I have tested this with black vinegar, with lemon, with plum sauce, and the rice-vinegar-plus-ketchup version wins for salmon every time. It tastes bright rather than brooding, and the color reads as appetizing on pink fish instead of fighting it. The same logic applies to the whole-fish version in Sweet and Sour Fish, where the sauce is thickened into a clingy glaze for a fried carcass.
Salmon itself is not traditional in Chinese sweet-and-sour cooking. The dish is a modern, mostly Western-Chinese adaptation that happens to work because salmon's fat and the bright glaze are a natural pair. Think of it as a cousin to scallion ginger salmon: same fish, same goal of a glossy sauce over fat flesh, completely different seasoning.
Ingredients
Ingredients at a glance

| Ingredient | Amount (4 servings) | Notes / substitute |
|---|---|---|
| Skin-on salmon filets | 4 pieces, about 150 g / 5 oz each | Similar thickness matters more than exact weight. One large piece roasted whole and portioned after works too. |
| White rice vinegar | 3 tbsp (45 ml) | Chinese or Japanese rice vinegar. Apple cider vinegar is a fine sub; do not use seasoned sushi vinegar (already sweetened/salted). |
| Tomato ketchup | 3 tbsp (45 ml) | Plain ketchup, not chili-garlic. It carries both sweetness and the red color. |
| Light soy sauce | 1 tbsp (15 ml) | Use light, not dark. See light vs. dark soy sauce for why dark would muddy the color. |
| Shaoxing rice wine | 1 tbsp (15 ml) | Dry sherry or a splash of dry white wine if you want it alcohol-free. See Shaoxing rice wine for what it adds. |
| White sugar | 1½ tbsp (20 g) | Rock sugar, dissolved, gives a cleaner glaze but regular sugar is fine. |
| Ground white pepper | ¼ tsp | Black pepper works but specks the sauce. |
| Olive oil (or neutral oil) | 1 tsp, for the skin | Any high-heat oil. Flavorless is better than extra-virgin here. |
| Fine salt | 1 small pinch, for the skin | Flaky salt will not dissolve into the skin; use fine. |
| Scallions | 2, finely chopped | Green parts for color, a little white for bite. |
The method, with the reasoning baked in
- Dry the fish first, before anything else. Blot both sides of the filets with paper towel until the surface no longer feels slick. Wet skin will steam instead of crisp, and a wet flesh surface dilutes the marinade into a thin wash. This single step is the difference between crackling skin and sad skin.
- Warm the sauce to dissolve the sugar. Whisk the rice vinegar, ketchup, soy sauce, Shaoxing wine, sugar, and white pepper in a small microwave-safe bowl, then heat 20 seconds in the microwave and stir until you can no longer feel sugar grains between your fingers. Sugar that is not fully dissolved will settle and scorch where the pan is hottest. No microwave? Warm it in a small pan on the stove, off the heat the moment it dissolves.
- Pour the sauce into the roasting dish and lay the fish skin-side up on top. Use a shallow ovenproof dish just big enough for the four filets. You want the sauce shallow and wide so it reduces, not deep and soupy. Skin up means only the flesh touches the sauce and the skin stays dry and exposed for the broiler. Let it sit 10 minutes, no longer. The goal is a light flavor soak, not a cure. Acid left on fish for half an hour starts to denature the proteins and turns the surface chalky, the same way ceviche "cooks." If you need to hold it longer, take the fish out of the sauce and refrigerate.

Pour the sauce into a shallow ovenproof dish just large enough for the four portions, then set them flesh-side down and skin-side up. Marinate about 10 minutes so only the flesh touches the sauce; longer than 30 minutes lets the acid turn the surface chalky.
- Set the rack before you preheat. Position the rack so the top of the salmon will sit about 10 cm / 4 in below the broiler element. Closer than that and the skin blisters before the flesh warms through; farther and you get pale, leathery skin. Then set the oven to fan broil (also called fan grill) at 220°C / 425°F and let it fully preheat. The fan broil symbol is a zigzag line at the top with a fan underneath. Plain broil without the fan works, but the fan is what carries heat around the sides of the filets and finishes the flesh evenly.
- Oil and salt the skin right before it goes in. Brush a thin, even film of oil over the skin and sprinkle a small pinch of fine salt. The oil conducts heat into the skin and promotes browning; the salt draws residual moisture to the surface where the broiler can evaporate it. A light hand on the salt matters, because the sauce already carries soy sauce and the reduction will concentrate it.
- Roast about 10 minutes, checking from 8. Slide the dish onto the rack and watch through the door. Done skin bubbles and blisters in golden patches. Done flesh separates into clean flakes when nudged and is just opaque in the center. Start checking at 8 minutes for thin filets, add a minute at a time. A probe thermometer in the thickest part should read 50-55°C / 120-130°F for medium; 60°C / 140°F if you want it fully set but still moist. The USDA's 63°C / 145°F target is fully cooked and slightly dry for salmon in this style; I personally pull mine at 52°C / 125°F.

Start checking from eight minutes. Stop when the skin has bubbled into golden crisp patches and the thickest flesh separates into clean moist flakes with a just-opaque center; serve promptly because the crisp skin softens quickly.
- Rest one minute in the pan, then plate. The sauce in the dish will have reduced to a glossy syrup. Lift the filets out with a thin spatula, letting the excess drip, and spoon the concentrated sauce over the top. Finish with chopped scallions. Serve right away; the skin softens within minutes of leaving the oven.
When it goes wrong, and how to save it
The skin is rubbery, not crisp. Almost always a moisture problem. Either the fish was not blotted dry, the sauce touched the skin during the marinade, or the oven was not hot enough. There is no rescuing a cooked limp skin into a crisp one. Next time, dry more aggressively, keep the sauce away from the skin, and confirm the oven actually reaches 220°C / 425°F with an oven thermometer. Cheap ovens lie by 15-25 degrees.
The sauce is thin and watery. Two causes. Either the dish was too deep and the sauce did not get enough surface area to reduce, or the filets released a lot of liquid and diluted it. Use a wider, shallower dish. If the fish is done but the sauce is still loose, lift the fish out and set the dish over a burner on medium for 60-90 seconds to reduce; it will thicken fast.
The sauce is too sharp, or too sweet. This is a balance problem and the fix is incremental. Too sharp: stir in a half-teaspoon of sugar and warm through. Too sweet: a few drops of vinegar or a tiny pinch of salt rounds it out. Ketchup brands vary wildly in sweetness, so taste the raw sauce before it goes in the dish and adjust the sugar down if your ketchup is the sugary kind.
The flesh is dry and overcooked. Salmon goes from perfect to chalky in a narrow window, and fan broilers are fierce. Pull the fish at a lower temperature than you think, and remember it keeps cooking from residual heat for another minute on the plate. I have overcooked this dish more times than I have nailed it, and the cause is always "I left it in for one more minute just in case." Trust the thermometer.
The skin sticks and tears when you lift the fish. Run a thin spatula cleanly between skin and dish before you try to lift. The reduced sauce turns into a sticky glaze that acts like glue. A small offset spatula or fish turner saves the filet's looks.
Variations and what to serve with it
The glaze is a template. Add a teaspoon of grated ginger and a minced garlic clove to the raw sauce for warmth, or a half-teaspoon of chili crisp for a sweet-sour-spicy version. A tablespoon of pineapple juice in place of one tablespoon of vinegar pushes it toward the Cantonese takeout profile. For a more savory, less candy-like result, drop the sugar to one tablespoon and add a half-teaspoon of oyster sauce.
For starch, this dish was made for plain rice. I cook jasmine rice on the stove and let the reduced sauce run into it. If you want something other than rice, five-spice potatoes roasted alongside give you a second crisp, savory element on the plate.
Balance the richness with a quick vegetable. Smashed cucumber salad with a garlicky, slightly spicy dressing cuts through the glaze in exactly the way you want. A fast garlic bok choy stir-fry adds bitter green contrast. If you are feeding a crowd, a clean, delicate Cantonese steamed fish as a second main lets the sweet-sour salmon be the loud dish and the steamed fish be the quiet one.
Storage and reheating
Leftover salmon keeps in the fridge for up to two days, skin-side up and loosely covered. The skin will not crisp again, so plan to eat the skin fresh and reheat the flesh. Warm gently in a 150°C / 300°F oven, covered with foil, until just heated through, about 8 minutes. Microwaving toughens the flesh and turns the sauce gritty. I do not recommend freezing cooked salmon in this sauce; the texture of the flesh suffers and the sauce separates on thaw.
You can prep the sauce a day ahead and keep it in the fridge; warm it to dissolve before using. The fish itself is best marinated at the last minute, for the 10 minutes the recipe calls for, no longer.
A note on the fish you buy
Farmed Atlantic salmon is the reliable choice here: consistent fat, even thickness, skin that crisps predictably. Wild king or sockeye is leaner and will dry out fast under a fan broiler; if you use it, pull it at 48°C / 118°F and accept that the window between perfect and overcooked is brutally short. Whatever you buy, ask for skin-on and check that the filets are cut to similar thickness, because a thin tail piece and a thick center piece will not finish at the same time. If your store only has uneven pieces, tuck the thin ends under themselves to even out the height.
If you want to branch out from salmon, the same glaze works over a firm white fish. Try it on belt fish for a stronger, more traditionally Chinese result, or over the pieces in a Sichuan fish with sour vegetable approach. For something with no sweetness at all, Sichuan boiled fish is the opposite end of the spectrum, chili-oil-bright and savory.
FAQ
Can I make this without a broiler? Yes. Bake at 220°C / 425°F on convection for 10-12 minutes, then finish the skin under a hot oven element for the last 1-2 minutes. The skin will not be quite as blistered but it will still crisp.
How long can the fish marinate? Ten minutes is the sweet spot. Past twenty, the vinegar starts to firm and dull the surface of the flesh. If you must hold it longer, take the fish out of the sauce and keep it separately in the fridge.
Can I use a different vinegar? Apple cider vinegar is the closest substitute for white rice vinegar. Avoid black rice vinegar here; it is too dark and heavy for salmon. Plain distilled white vinegar is too harsh unless you cut it with a teaspoon of water.
Is the salmon fully cooked? At my preferred 52°C / 125°F pull temperature, the center is medium-translucent. If you need it fully cooked for safety or preference, take it to 63°C / 145°F and accept slightly drier flesh.
Can I double it for a crowd? Easily. Use two dishes rather than one large one, so the sauce stays shallow and reduces properly. Rotate the dishes between the racks halfway through for even browning.



