Heat the olive oil in a large skillet over medium-high heat. Once shimmering, add the diced onion and sauté for about 5 minutes until softened and translucent. Add the minced garlic and cook for just 30 seconds until fragrant—garlic burns quickly, so timing is important here. Add the ground beef, breaking it apart with a spoon as it cooks, and stir in the Italian seasoning, salt, and black pepper. Cook for 5-7 minutes until the beef is completely browned with no pink remaining. This browning step creates deep, savory flavors that will anchor the entire dish.
Transfer the browned beef mixture from Step 1 into your crockpot. Pour in the beef broth and marinara sauce, stirring well to combine. Add the half and half, which will add richness and help balance the acidity of the tomato sauce. Give everything a good stir to ensure the seasonings are evenly distributed. I like to use a good quality marinara (Rao's is excellent) because it makes a real difference in the final flavor—it means you don't need to simmer forever to develop taste.
Cover the crockpot and cook on low for 6 hours, or on high for 3 hours if you're short on time. The sauce will develop deeper flavors and the beef will become tender. You don't need to stir during this phase—the slow, gentle heat is doing the work for you.
After the sauce has cooked, stir the uncooked ziti pasta directly into the crockpot, breaking up any clumps and making sure it's submerged in the liquid as much as possible. Switch the crockpot to high heat, cover, and cook for 20-30 minutes, stirring occasionally (every 8-10 minutes). The pasta will absorb the flavorful sauce and reach al dente texture. I like to stir partway through to ensure even cooking and prevent sticking on the bottom.
Once the pasta is tender, stir in 1 cup of the shredded mozzarella cheese until it's fully melted and incorporated into the pasta. Top the entire surface with the remaining mozzarella and the freshly grated Parmesan cheese. Cover the crockpot and let it sit for 5-10 minutes until the top cheese is melted and bubbly. The residual heat will melt the cheese without overcooking the pasta underneath.