Moskva on paper had decent air defenses, but the hardware was all Cold War era stuff, not upgraded and possibly not even working.

That thing that looks like an ice cream cone on the back of the ship is the fire control radar, a 3R41 Volna, NATO code name “Top Dome” system for the ship’s S-300F missiles. The missiles themselves aren’t bad, but the radar set dates back from the early 80s. In pictures of the ship before it sank, the radar was in its idle position, which indicates it was either inoperative or not turned on.
At any rate, the fire control radar has a blind spot forward, where the Ukrainian cruise missiles impacted. The ship also does have point defense (both missiles and cannon) but if the incoming was not picked up on radar beforehand it likely wouldn’t be prepared.
There’s another wrinkle: these ships were actually built in Ukraine. In fact, there’s still an unfinished one sitting at the Mykolayiv Shipyard. Since the in-service units have seen very little modification, this means the Ukrainians knew everything about them including all the weaknesses of the design and exactly where to hit it to take it out.
