Preheat broiler.
Whisk together eggs, herbs, parmesan, 1/4 teaspoon salt, and 1/4 teaspoon pepper in a large bowl.
If using, cook bacon in a 10-inch heavy skillet (cast-iron or non-stick) over medium heat, stirring, until crisp. Transfer bacon with a slotted spoon to a large bowl then pour off all but 2 tablespoons fat.
Add potatoes and 1/4 teaspoon each of salt and pepper to skillet, and sauté over medium-high heat until lightly brown, about 5 minutes. Cover skillet and continue to cook over medium-low heat, stirring a few times, until potatoes are just tender, about 3 minutes more. Transfer the potatoes with a slotted spoon to bowl containing the bacon.
Add 1 tablespoon oil to skillet and sauté onion over medium-high heat until pale golden, about 4 minutes, then add and garlic and cook for 1 minute more. Add spinach and sauté until just wilted.
Stir in the potatoes and bacon, and remaining tablespoon oil into onion mixture, spreading it evenly.
Pour egg mixture evenly over vegetables and cook over medium-high heat, lifting up cooked egg around edges with a heat-proof rubber spatula to let uncooked egg flow underneath, 2 to 3 minutes. Reduce heat to medium and cook, covered, until it appears mostly set, with a moist top and center, 3 to 5 minutes more.
Remove lid. Broil frittata 5 to 7 inches from heat until set, but not too brown, 1 to 2 minutes, then top with an even layer of cheese and continue to broil until browned and bubbling, 1 to 3 minutes (watch carefully). If using goat cheese, add at the last minute of broiling.
Either slide the frittata onto a serving plate or cut and serve wedges directly from the skillet.