Skip to content
Blog

Migration How-To

Internal Linking After Migration: Crawl Export Workflow

ByBorhen Benltaief··Updated May 25, 2026·16 min read

Most migration checklists spend a lot of ink on redirects and sitemaps. Internal links get a line item at best, and often nothing at all. This is a mistake. And it is one that costs sites significant ranking power in the months following a CMS move.

Internal links do two things for SEO. First, they tell search engines which pages on your site are important. The more internal links a page receives, the more ranking authority it accumulates from within your own domain. Second, they guide crawlers through your site's content structure. A page that receives no internal links, an orphaned page, is hard for Google to find and impossible for it to properly contextualize within your site's topical hierarchy.

When you migrate from WordPress to a new CMS, internal links break in predictable ways. URL structures change. Hardcoded links in post content point to old paths. Navigation menus get rebuilt, sometimes dropping links that were carrying crawl signal to important pages. By the time the dust settles, your site can have dozens or hundreds of broken internal links and a set of orphaned pages that are invisible to both users and search engines.

This guide covers how to audit your internal link structure before and after a migration, what the three most common internal linking failures look like in practice, and how to use the migration window as an opportunity to build a stronger link structure than you had before. If you're in the early stages of planning, see our breakdown of WordPress to Next.js migration costs to understand the full scope and budget. For the complete pre-migration checklist, see our 47-point WordPress migration checklist.

Quick Checklist

  • Crawl your WordPress site and export all internal links (source URL to destination URL)
  • Identify pages with the most inbound internal links (these are your most important pages)
  • After migration, re-crawl and compare: are all internal links resolving to 200 pages?
  • Check for orphaned pages (pages in the sitemap but with zero internal links)
  • Update hardcoded internal links in CMS content to use new URL paths
  • Verify anchor text hasn't changed on high-value internal links
  • Add link depth, canonical target, and final status code to the post-launch crawl export
  • Create a monitoring log for orphan fixes, redirected internal links, and priority URL restoration

Crawl Export Workflow

The internal-link audit should be run like a migration QA job, not a subjective content review. You need two crawl exports and one priority overlay.

  1. Crawl the old WordPress site before launch and export all internal inlinks.
  2. Crawl the new site after launch and export all internal inlinks again.
  3. Export the new XML sitemap and the list of indexable pages discovered by the crawler.
  4. Overlay priority data from GSC clicks/impressions, GA4 landing pages, backlinks, revenue pages, and manually important service pages.
  5. Join the exports by destination URL and by mapped old-to-new URL where the slug changed.
  6. Build a fix queue for redirected internal links, broken links, orphaned pages, deep pages, and canonical conflicts.

At minimum, the spreadsheet should contain these columns:

ColumnWhy it mattersFix rule
Source URLThe page containing the internal link.Fix highest-authority source pages first: homepage, nav, service pages, and high-traffic posts.
Destination URLThe page receiving internal equity.Destination should be the final canonical 200 URL, not an old URL or redirecting URL.
Status and final URLShows whether a link goes through 301/302, 404, 500, or lands on a different final URL.Update links that hit redirects. Fix 404s immediately. Investigate temporary redirects.
Indexability and canonicalA linked page can still be non-indexable or canonicalized somewhere else.If internal links point to a URL that canonicalizes away, decide which URL should receive the link.
Inlink count and link depthShows pages that lost authority or became too deep after the rebuild.Priority pages should not sit at depth 4+ or depend on one weak contextual link.
Anchor textShows whether topical signals survived the redesign.Keep descriptive anchors on priority pages. Replace generic read more anchors where useful.
Priority tierSeparates revenue/ranking URLs from low-value archive cleanup.P0 comes from GSC clicks, leads/revenue, backlinks, nav placement, and service-page importance.

Here is what the fix queue looks like in practice:

FindingExample evidenceFixPriority
Redirected internal link/blog/old-checklist links to /seo-audit, which 301s to /services/wordpress-seo-audit.Update the link in the source content to the final service URL.P0 if the source or destination has traffic, leads, backlinks, or nav placement.
Orphaned sitemap URL/resources/migration-checklist is in the sitemap but has zero discovered inlinks.Add contextual links from the migration service page, related blog posts, and resources hub.P0 if the page is a lead magnet, service asset, or ranking target.
Canonical conflictInternal links point to /blog/post/, but the page canonical points to /blog/post.Align links, redirects, sitemap URL, and canonical target to one final URL.P0 if Google selected a different canonical in URL Inspection.
Link depth regressionA priority service page moved from depth 2 to depth 5 after the menu rebuild.Restore nav, hub, footer, or contextual links so the page is reachable within 2 to 3 clicks.P0 for pages with commercial intent or pre-launch rankings.

Use the canonical issue worksheet if the link destination, canonical target, sitemap URL, and redirect target disagree. Use the post-launch monitoring process as the migration monitor once fixes are deployed: log the URL, issue type, source page, fix, deploy time, recrawl request, and next check date.

Why Internal Links Matter More Than Most Migration Checklists Admit

Google uses internal links as one of the primary signals for understanding a site's information architecture. When Googlebot crawls your site, it follows internal links to discover pages, assign relative importance, and understand topical relationships between content. A page that is linked from your homepage, your navigation, and three high-traffic blog posts sends a strong signal that it is important. A page that sits in your sitemap but receives zero internal links sends almost no signal at all.

After a migration, many sites see rankings for secondary and tertiary pages drop. Not because the content changed, but because the internal link structure that was distributing ranking authority to those pages got disrupted. This is a quiet failure. It does not produce 404 errors in Search Console. It does not trigger any obvious alerts. It simply causes pages to gradually lose visibility as Google recalibrates its understanding of the site's structure.

The impact compounds over time. If important pages stop being linked internally, crawlers visit them less frequently, they fall out of regular crawl cycles, and any new content updates on those pages take longer to be indexed. The pages do not disappear. They just become less competitive.

This is also why a migration is an opportunity, not just a risk. If your old WordPress site had poor internal linking (a common situation, since WordPress's default structure does not enforce any link discipline) rebuilding the site gives you a chance to design the link structure intentionally. Many sites exit a well-executed migration with stronger topical authority than they had going in.

The Three Internal Linking Failures That Tank Migrations

Links Pointing to Old URLs (Not Redirected or Updated)

This is the most common failure. Your blog posts, service pages, and other CMS content are full of hardcoded internal links. Links written directly into the content, not managed by a navigation system. When your URL structure changes during a migration, those hardcoded links still point to the old paths.

If you have set up proper 301 redirects, Google will follow those redirects and eventually arrive at the correct page. But there is a cost: each redirect in a link chain dilutes the equity passed through it. An internal link that passes through a redirect is weaker than a direct link. At scale, hundreds or thousands of pieces of content with hardcoded links, this dilution adds up to a measurable reduction in the ranking signal distributed across your site.

The fix is to update the hardcoded links in your content to point directly to the new URLs rather than relying on redirects to catch them. For WordPress, this can be done with a SQL query against the wp_posts table before migrating content to the new CMS. For content that has already been migrated, most CMS platforms have a find-and-replace function that can update URLs across all content at once.

See our full SEO migration checklist for the complete sequence, including when in the migration process to handle internal link updates.

Orphaned Pages (Pages With Zero Internal Links Post-Migration)

An orphaned page is any page that exists in your sitemap or is otherwise accessible by URL but receives no internal links from other pages on your site. Googlebot discovers pages primarily by following links. If no page on your site links to a given URL, the only way Google finds it is through the sitemap. Pages discovered only via sitemap are crawled less frequently and ranked less aggressively than pages that are part of an interconnected link structure.

Orphaned pages are created during migrations in several ways. Navigation menus get rebuilt and items get dropped. Category and tag pages that previously auto-linked to posts may not have equivalents in the new CMS. Footer links get redesigned out. Sidebar widgets that linked to related posts disappear. The result is a set of pages that were well-integrated in the old site and now exist in isolation.

The only way to find orphaned pages is to crawl the site and compare the pages in your sitemap to the pages that receive at least one internal link. Any page in the sitemap that does not appear as a link destination in the crawl is orphaned. Tools like Screaming Frog, Ahrefs Site Audit, and Semrush Site Audit can identify orphaned pages automatically.

Anchor Text Changes That Weaken Topical Signals

Anchor text, the visible text of a link, is a relevance signal. When a page is internally linked with keyword-rich anchor text (for example, "Next.js migration SEO checklist" instead of "click here"), Google gets an additional signal about what that destination page is about. This contributes to topical relevance and can support rankings for the anchor text's primary keywords.

During a migration, anchor text gets changed in subtle ways. Navigation items get renamed. Link text gets updated as part of a content refresh. Related post widgets that pulled anchor text from page titles switch to different templates. In aggregate, these changes weaken the topical signal that internal links were providing.

Before migrating, export your internal link inventory including anchor text. After migration, spot-check links to your most important pages and verify the anchor text is consistent or improved. If anchor text has been genericized (changed from descriptive to "read more" or "learn more"), update those links.

How to Audit Internal Links Before and After Migration

The pre-migration audit is simpler: crawl your WordPress site with Screaming Frog (free for under 500 URLs, paid for larger sites) and export the "All Inlinks" report. This gives you a complete picture of every internal link on the site: source URL, destination URL, anchor text, and status code. Save this export. It is your baseline.

Within the export, identify your most-linked pages. Sort by inbound internal link count descending. The pages at the top of this list are your most important pages from Google's perspective. If the migration does anything to reduce the number of internal links pointing to these pages, you will feel it in rankings.

After migration, run the same crawl against the new site. You are looking for three things:

First, compare destination URLs. Any destination that returns a 301 or 302 redirect instead of a 200 is a link that should be updated to point directly to the new URL. Any destination that returns a 404 is a critical link that needs immediate attention.

Second, identify pages that gained or lost internal links. If a page that previously received 40 internal links now receives 12, something in the navigation or content structure changed in a way that reduced its authority signal. Investigate and restore the missing links.

Third, identify new orphaned pages by cross-referencing your sitemap against the pages that appear as link destinations in the crawl. Pages in the sitemap with zero inbound internal links need links added from relevant content.

Fourth, compare click depth for priority URLs. A page can keep its links and still lose crawl prominence if it moves deeper in the site. Any ranking or revenue page that moves from depth 1 or 2 to depth 4 or 5 needs a navigation, hub, or contextual link fix.

Fifth, compare destination canonicals. If internal links point to a URL that declares a different canonical, your own site is sending mixed signals. Use the canonical issue worksheet for the canonical side of the same audit.

Our redirect map best practices guide also covers internal link considerations as part of a complete migration redirect strategy.

Improving Link Structure During the Rebuild (An Opportunity, Not Just Parity)

A migration is one of the few moments when you have legitimate reason to restructure your entire site at once. Rather than simply restoring what existed in WordPress, consider whether the old internal link structure was actually serving your SEO goals.

Most WordPress sites develop their internal link structure organically over years. Blog posts link to whatever was relevant when they were written. Navigation menus reflect whatever pages existed at the time the menu was last edited. The result is typically a flat, inconsistent structure with no deliberate topical clustering.

The alternative is a hub-and-spoke model (also called topic clustering). In this structure, a high-authority pillar page on a broad topic links to and receives links from a set of supporting pages that cover specific subtopics. For example, if you offer migration services, your main migration service page is the hub. Blog posts on specific migration topics (redirect mapping, sitemap generation, internal linking) are the spokes. Each spoke links back to the hub, and the hub links out to the spokes.

This structure sends a strong topical signal: your site is authoritative on migration, and the hub page is the primary destination for that topic. Google rewards this with better rankings for both the hub and spoke pages.

Rebuilding your site gives you a clean slate to implement this structure. As you migrate content, identify your pillar pages and the supporting content that should link to them. Update all supporting posts to include a contextual link back to the relevant pillar. Update the pillar pages to link out to each supporting piece. The internal link structure you build into the new site can be substantially stronger than what you had in WordPress.

Structuring Internal Links in Next.js

If you are migrating to Next.js, internal linking is handled differently than in WordPress. In WordPress, links in post content are stored in the database as absolute or relative URLs. In Next.js with a headless CMS (Contentful, Sanity, Prismic, etc.), your content typically stores links as relative paths or as structured references to other content entries.

Make sure your content model supports internal linking in a way that does not hardcode full production URLs. If an author links to a migration service page in Contentful rich text, store the relative path instead of the full domain. This way, internal links continue to work correctly if your domain changes or if you run the site in a staging environment.

Also configure your Next.js application to render internal links using the <Link> component from next/link rather than plain <a> tags. The <Link> component enables client-side navigation, which improves page load speed for users who click internal links. A secondary UX benefit that complements the SEO value of the links themselves.

For your SEO-safe WordPress to Next.js migration, internal link preservation is part of the content audit we conduct before any content moves to the new CMS. Every link in every piece of content is validated against the new URL structure before launch.

Add Internal Links to the Migration Monitor

Internal links should not be checked once and forgotten. Add them to the same first-30-day monitoring rhythm as Search Console, sitemap, redirect, and conversion checks.

Use a simple migration monitor with these checks:

  • Daily for the first 3 days: crawl priority URLs and confirm internal links resolve directly to 200 canonical pages
  • Twice in week 1: compare sitemap URLs against crawl-discovered URLs and flag orphan pages
  • Weekly for weeks 2 to 4: compare click depth and inbound internal-link counts against the pre-launch baseline
  • Every time content is edited: confirm links still point to canonical URLs and do not rely on redirects

The broader first-30-day monitoring model is covered in post-launch SEO monitoring after migration. If rankings have already dropped, use the traffic-drop recovery audit rather than waiting for the next weekly check.

Official References for This Workflow

Use these references when the internal-link audit turns into engineering decisions:

FAQ

Do internal links pass link equity the same way external links do?

Internal links pass link equity, often called PageRank or link juice, but the mechanism works differently than external links. External links bring authority into your domain from outside. Internal links redistribute authority that already exists within your domain. A page with many strong external links can pass some of that accumulated authority to other pages through internal links. This is why linking internally from your high-authority pages (homepage, high-traffic blog posts) to pages you want to rank carries real SEO value.

How do I find orphaned pages after a migration?

Crawl your new site with a tool like Screaming Frog and export the list of all pages the crawler discovers by following links. Then compare that list to your XML sitemap. Any URL in the sitemap that does not appear in the crawl's page inventory has no internal links pointing to it. It is orphaned. Screaming Frog also has a dedicated orphan page report if you provide a sitemap file during the crawl setup. Fix orphaned pages by adding at least two to three contextually relevant internal links from existing pages that cover related topics.

Should I update internal link anchor text during a migration?

Yes, where it can be improved. But do not change anchor text that is already descriptive and keyword-relevant just for the sake of changing it. The migration is a good time to replace generic anchor text ("click here," "read more," "this page") with descriptive anchor text that reflects the content of the destination page. For your most important pages, audit the anchor text of every internal link pointing to them and make sure it is consistent and topically relevant. Avoid over-optimizing by using exact-match keywords as anchor text on every single internal link to a page. Vary the phrasing naturally.

How many internal links per page is ideal for SEO?

There is no universal ideal number. The guidance that matters most is that every internal link should be editorially justified. It should help the user navigate to relevant information. Pages with lots of genuinely useful links (like a comprehensive pillar page linking to 20 supporting articles) can have many links without issue. What hurts SEO is pages with thin or spammy link lists where quantity is the goal rather than relevance. For most content pages, somewhere between three and ten contextual internal links to other pages on your site is a reasonable target. Navigation links and footer links are separate from this count.

What tools can I use to audit internal links on my WordPress site?

Screaming Frog SEO Spider is the most thorough option. It crawls the site and exports a complete internal link map. The free version handles up to 500 URLs; the paid license covers unlimited URLs. Ahrefs Site Audit and Semrush Site Audit both offer internal link reporting as part of their broader audit capabilities, and they can also show you which internal links are pointing to redirected or broken URLs. For a quick check without installing software, the Google Search Console Links report shows which pages on your site receive the most internal links, though it does not show the specific source URLs of those links.

Next Steps

Your internal link structure is one of the most controllable SEO signals on your site. A migration is the right time to audit it, fix what is broken, and build something better than what you had. Start with the pre-migration crawl, complete the post-launch comparison, and address orphaned pages before you call the migration done.

Related posts:

Services:

Borhen Benltaief
Borhen Benltaief

Founder and lead engineer at SEOParity. Technical SEO and Next.js migration audits.