Preheat the oven to 400°F.
Slice the zucchini in half lengthwise. Use a spoon to scoop out the center of each half, leaving about ¼ inch of flesh along the sides so they hold their shape. Roughly chop the scooped zucchini flesh and set it aside.
Place the hollowed zucchini halves onto a rimmed baking sheet. Drizzle lightly with olive oil and sprinkle with a pinch of salt and pepper.
Bake the zucchini shells for 10 minutes to soften slightly while you prepare the filling.
Heat a large skillet over medium heat. Add the olive oil.
Add the diced onion and cook for 4 to 5 minutes until softened.
Add the ground beef and cook for 6 to 8 minutes, breaking it apart, until browned and no longer pink.
Add the minced garlic and cook for 30 seconds until fragrant.
Add the chopped zucchini flesh to the skillet and cook for 3 minutes until slightly softened.
Stir in the crushed tomatoes, tomato paste, kosher salt, black pepper, Italian seasoning, paprika, onion powder, and crushed red pepper flakes. Cook for 4 to 5 minutes until thickened slightly.
Remove the zucchini shells from the oven. Spoon the beef mixture evenly into each zucchini half, pressing it in so it fills completely.
Sprinkle the mozzarella and Parmesan evenly over the tops.
Return the pan to the oven and bake for 15 to 18 minutes until the cheese is melted and lightly browned.
If you want extra color on top, broil for 2 minutes at the end, watching closely.
Sprinkle with chopped parsley before serving if using.