Beginning notes: It's common to temporarily lose some traffic (15~20%) after a site migration, because it takes some time for Google to crawl your new site. However, if you have problems with redirects, duplicate content, metadata, etc., then you may not recover organic traffic.
Google Search Console
Export the Search Console data from your legacy site: search analytics queries & pages, crawl errors, blocked resources, URL parameters, structured data, etc.
Then, set up a new property for your new domain. Ensure that it is set up for the proper version, accounting for http, https, and www.
Generate a new XML sitemap with the new pages, site structure, and hreflang if needed. After the site migration, upload the new XML sitemap to Google Search Console. You can submit both the old and new sitemaps to clarify that a migration has taken place.
During a migration, you may temporarily have duplicate content, making it difficult for Google to decide which page to show in the SERPs. To make sure that Google shows the page that you intend, use canonical tags to signal which is the main version. Google will usually honor your signal and prioritize the canonical URL.
The robots.txt file tells crawlers which pages to access. If it is not properly configured, your new pages could be hidden from Google. After the site migration, you should double check robots.txt to make sure that it includes the proper instructions for showing important pages and hiding old or irrelevant pages.
If you are moving your site to a new domain or subdomain, use 301 permanent redirects to tell Google to transfer ranking signals and index the new pages. On the other hand, you can use 302 temporary redirects for pages that you are planning to sunset after the migration.
URL Status Codes
After the migration, crawl the new site to verify that there are no error status codes. 404 and 501 errors are the biggest SEO offenders that you should prioritize resolving. The second biggest offenders are links to 301 pages on the old domain. Update your links to point directly to the new domain, not through a redirect.
It's also good practice to create a custom 404 page to help users navigate your new site, in case they land on a page that no longer exists.
Use this Google Apps Script to bulk check status codes.
Keep the Old Domain
Unless the purpose of the migration was to sell the old domain, I recommend keeping it even after Google stops indexing it. When preparing the site migration, you should have redirected old pages to new pages on a per-page basis. But if those redirects are lost, the backlinks earned on the old domain will also be lost.