A redirected page that still shows up in search usually isn’t a sign the redirect failed. Google has to re-crawl the old URL and reprocess the redirect before its index updates, so the old address can keep appearing until that happens. Google says this directly: after a move, it will often go on showing the old URLs for a while even though the new ones are already indexed, and the old names fade on their own as it catches up. The lingering listing is normal lag, not a broken redirect.

How long the lag runs depends on how often Google re-crawls the URL, and a few loose ends stretch it. Internal links still pointing at the old address keep feeding it back to Googlebot as a live destination, slowing the swap. A sitemap that still lists the old URL keeps submitting it as a page you consider important. And a redirect target that only loosely matches the old page makes Google slower and less confident to consolidate the two, since a weak match looks less like a genuine move.

So give the re-crawl time before assuming anything is wrong, and in the meantime clear the signals that keep the old URL alive. Update internal links to point straight at the destination, drop the redirected URL from your sitemap and list the final page instead, and make sure the target is a clean match for what the old page covered. Then let Google reprocess on its own schedule rather than reading a slow update as a failure.