I'm migrating sub-domains to sub-folders, but this question is likely applicable for most URL migrations.
For example: subdomain1.example.com to example.com/subdomain1 and any child pages.
Bear with me as it may just be me but I'm having trouble understanding whether internal links (menu, contextual etc and potentially the sitemaps) should be kept as the pre-migration URL (with .301 in place to the new URL) to give Google a chance to process the redirects or if they should be updated straight away to the new URL to provide a 200 response as so many guides suggest.
The reason I ask is unless Google specifically visits the old URL from their index (and therefore processes the .301), it's likely to be found by following internal links on the website or similar which if they're updated to reflect the new URL will return a 200. I would imagine that this would be treated as a new page, which is concerning as it would have a canonical pointing toward itself and the same content as the pre-migrated URL.
Is this a problem? Do we need to allow proper processing of redirects for migrations or is Google smarter than this and can work it out if they visit the old URL at a later date and put two and two together? What happens in-between? I haven't seen any migration guides suggest leaving .301s in place but to amend links to 200 as soon as possible in all instances.
One thought is I guess there's also the Fetch as Google tool within Search Console which could be used with the old URLs - could this be relied on?
Apologies if this topic has been covered before but it's quite difficult to search for without returning generic topics around .301 redirects.
Hope it makes sense - appreciate any responses!