Prep the oven and pan: Preheat your oven to 400°F (200°C). Lightly grease a 9x13-inch baking dish with 1 tbsp olive oil.
Hollow the zucchini: Trim the ends, slice each zucchini lengthwise, and use a spoon to scoop out the centers, leaving about 1/4-inch shell.
Reserve about half of the scooped flesh, chop it finely, and squeeze out excess moisture.
Season the boats: Brush the zucchini shells with the remaining 1 tbsp olive oil. Sprinkle with salt and pepper. Arrange them cut-side up in the baking dish.
Par-bake the shells: Bake the empty zucchini boats for 8–10 minutes to soften slightly.
This helps them cook evenly and not get watery later.
Brown the beef: While the shells bake, heat a large skillet over medium-high. Add the ground beef and cook, breaking it up, until browned with some crispy edges, about 5–7 minutes. Drain excess fat if needed, leaving a little for flavor.
Sauté aromatics: Reduce heat to medium.
Add the chopped onion and cook 3–4 minutes until translucent. Stir in the garlic and cook 30 seconds until fragrant.
Add zucchini and sauce: Stir in the chopped zucchini flesh, tomato paste, tomato sauce, Italian seasoning, smoked paprika, and red pepper flakes. Simmer 3–4 minutes until thickened.
Season with salt and pepper to taste. Remove from heat and stir in half the Parmesan.
Fill the boats: Spoon the beef mixture evenly into the par-baked zucchini shells, mounding it slightly.
Top with cheese: Sprinkle the mozzarella over the boats, then the remaining Parmesan for a golden finish.
Bake to finish: Return the dish to the oven and bake 12–15 minutes, until the zucchini is tender and the cheese is melted and bubbling with light browning.
Garnish and serve: Let cool 5 minutes. Sprinkle with chopped parsley or basil.
Serve warm.