The other factor in Italy is the weather, which is hampering air operations and making the life of the infantryman an awful mess. Once summer comes with warm, dry weather, the allies can operate freely in the air, and mobility is restored to the ground units. Of course, Italy is a low priority for the Germans behind France and Russia. While they are not getting many replacements, the Germans did not feel the need to pull units out of Italy wholesale, as the offensive that broke the Gustav Line began before D-Day and also before the Soviet summer offensives.
I would say that while the Germans are making good use of the terrain, it’s really the weather that is keeping the Allies in check.
Weather and possibly the big Vesuvius eruption of 44