Rimmed baking sheet Use a standard 18x13-inch sheet pan so the vegetables roast instead of steam; a large roasting pan works too, but spread the veg in a single layer.
Parchment paper or foil Parchment helps prevent sticking and makes cleanup painless; foil is fine but lightly oil it so the fish crust releases cleanly.
Mixing bowl One medium bowl for tossing vegetables; if you hate dishes, toss directly on the sheet pan, but mix well so spices don't clump.
Microplane or fine grater For lemon zest and garlic; a small knife works, but grating makes a smoother yogurt sauce.
Instant-read thermometer (optional) Not required, but it's the easiest way to avoid overcooking; pull fish at 135°F to 140°F and let carryover finish it.
Fish spatula (optional) A thin, flexible spatula keeps fillets intact; any spatula works if you slide it fully under the fish before lifting.
Ingredients
For the roasted vegetables
2bell pepperany color, sliced into 1-inch strips
1zucchinicut into 1-inch half-moons (swap for eggplant if you want it more tagine-like)
1red onioncut into thick wedges so it doesn't disappear
1cherry tomatouse 1 pint; they burst and turn jammy in the pan
3tablespoonolive oilextra virgin; avocado oil works too
1teaspoonground cuminwarm and earthy; coriander is a good swap if that's what you have
1teaspoonsweet paprikaadds color and gentle sweetness; use smoked paprika if you want a deeper roast flavor
1teaspoonkosher saltuse 1/2 teaspoon if using fine salt
½teaspoonblack pepperfreshly ground if possible
1lemonhalf sliced into thin rounds for roasting, half reserved for finishing
For the zaatar-crusted fish
4white fish filletcod, haddock, halibut, sea bass, or tilapia; boneless, skinless, about 6 ounce each
1tablespoonolive oilhelps the crust brown
2tablespoonzaatarstore-bought is great; if yours is very salty, reduce added salt below
2tablespoonpanko breadcrumbfor extra crunch; swap with regular breadcrumb or crushed matzo
1tablespoonsesame seedoptional, but really plays up the zaatar
1teaspoonkosher saltuse 1/2 teaspoon if using fine salt, and reduce if your zaatar is salty
Quick preserved-lemon yogurt (optional but highly recommended)
¾cupplain greek yogurtwhole-milk is the creamiest; dairy-free yogurt works but choose an unsweetened one
1tablespoonpreserved lemonfinely chopped rind only (no pulp); swap with 1 teaspoon lemon zest plus 1/2 teaspoon extra salt
1garlic clovefinely grated, or substitute 1/4 teaspoon garlic powder
1tablespoonwaterthin to a drizzle-able sauce; add another tablespoon if needed
1tablespoonolive oiloptional, but it makes the sauce taste rounder
To finish
¼cupcilantroroughly chopped; parsley or mint works if you're not a cilantro person
1lemoncut into wedges for serving
Instructions
Prep
Heat the oven to 425°F. Line a rimmed baking sheet with parchment paper (or foil, lightly oiled). This high heat is what gives you browned edges on the vegetables without turning the fish into cotton.
Pat the fish fillets very dry with paper towel and set them in the fridge while you start the vegetables. Dry fish is the secret to a crisp zaatar crust that sticks instead of sliding.
Roast the vegetables first
In a mixing bowl, toss bell pepper, zucchini, red onion, and cherry tomato with 3 tablespoons olive oil, cumin, paprika, 1 teaspoon kosher salt, and 1/2 teaspoon black pepper. Add half the lemon slices and toss again so the slices get coated (they'll candy a little in the oven).
Spread the vegetables on the sheet pan in a single layer. Roast for 15 minutes. You want the peppers and onions starting to soften and the tomatoes just beginning to blister. This staggered start is the key to getting properly roasted moroccan fish and vegetables on one pan, because fish cooks faster than sturdy veg.
Make the crust and sauce while the vegetables roast
In a small bowl, mix zaatar, panko breadcrumb, sesame seed (if using), and 1 teaspoon kosher salt. Drizzle in 1 tablespoon olive oil and stir until the mixture looks like damp sand. If it feels dry, add 1 teaspoon more oil; the crumbs should clump when you pinch them.
Optional sauce: In another small bowl, stir greek yogurt, preserved lemon, grated garlic, water, and optional olive oil until smooth. Taste and adjust: it should be bright, a little salty, and garlicky. Refrigerate until serving so it stays thick.
Add the fish and finish roasting
After the vegetables have roasted for 15 minutes, pull the pan out and use a spatula to nudge them around, making 4 little spaces for the fish. This keeps the fish from sitting in vegetable juices, which would soften the crust.
Set the fish fillets into the open spaces. Brush the tops lightly with a little olive oil if they look dry, then press the zaatar mixture firmly onto each fillet (don't just sprinkle it; actually press so it adheres). Add the remaining lemon slices around the fish.
Return the pan to the oven and roast for 10 minutes. The fish is done when it flakes easily and turns opaque in the thickest part; if using a thermometer, aim for 135°F to 140°F, then rest 2 minutes for carryover. If you want extra color on the crust, broil for 2 minutes, watching closely so the crumbs don't burn.
Finish and serve
Squeeze the reserved lemon half over the vegetables and fish right when they come out of the oven. This last hit of acid makes everything taste sharper and more "restaurant."
Scatter cilantro over the pan. Serve the fish with a big spoon of roasted vegetables and a drizzle of preserved-lemon yogurt on top (or on the side for dipping). If you're collecting moroccan fish dinner ideas, this one is especially good with warm flatbread to swipe through the pan juices.