Germany had essentially two options here. 1) Capture the city quickly, before the defenses could be built up. 2) Capture it via siege.
I don’t think that creating an urban combat situation, in which Germany attempted to capture the city street by street, would have been viable. In typical combat situations German soldiers had a 3:1 or 4:1 advantage in combat effectiveness over their Soviet counterparts. But in urban, street-to-street fighting the ratio was about 1:1. Germany could not afford anything even remotely approaching that 1:1 ratio, which is why something other than street-to-street fighting was necessary.
Von Manstein wrote that during the Barbarossa operation of '41 there had been a perfectly good opportunity to take Leningrad. But that this was wasted, allowing the Soviets to fortify it.
The other option would have been to do a better job of putting it under siege. This would have entailed tightening the cordon around the city, preventing just about anything from making it through. I think there was a case when Germany attempted exactly that. However, at the same time the Soviets were attempting to break the siege, so each side’s offensive encountered the other’s. From a tactical view there may have been more Germany could have done. But I think the real problem was strategic: the Soviet Union had too much military strength. A discussion on how to address that problem is probably outside the scope of this thread.