SEO

How to Find Which Posts Link to a Page in WordPress

Finding which WordPress posts link to a page, with Search Console, a content search and a crawler

You’re about to delete a page, merge it into another one, or change its slug. Or you’re staring at a page that gets no traffic and wondering if anything on your own site even points at it. So you look for the WordPress version of Wikipedia’s “What links here” button. There isn’t one.

It’s an old question. One site owner who inherited a big site full of duplicate pages asked it on the WordPress.org forums years ago, under the title “How to check whether a page is linked?”, and it never got a real answer. Another thread asked, “Is there a straightforward way to find pages that have active links to specific URLs?” Zero replies.

So here’s the answer we’d have posted. If you want a whole-site audit instead (orphans, broken links, link depth), we covered that in our internal link checker guide.

Quick answer: three free ways

  1. Google Search Console’s Links report. Nothing to install. Shows the pages Google found linking to your page. Sampled and a bit behind.
  2. Search your own content for the URL. The WordPress admin search, or wp db search if you have WP-CLI. Exact and current, but only finds what you search for.
  3. Crawl the site with Screaming Frog. Free up to 500 URLs. The most complete view of links a visitor can actually click, including menus and footers.

For anything you’re about to delete, we’d use at least two of them. Each one has a blind spot the others cover.

If your site is verified in Google Search Console, open the Links report from the left sidebar (it sits near the bottom). Then:

  1. Under Internal links, look at the Top linked pages table.
  2. Click MORE at the bottom of the table to see the full list.
  3. Click the URL of your page. You get the pages on your site that Google found linking to it.

That’s a decent first look, and it costs nothing. But read Google’s own fine print. The report “shows a sample of internal and external links” and isn’t a complete list. Tables stop at 1,000 rows. Links are grouped by canonical URL, duplicates are merged, and because it includes links Google found over time, some of what you see may already be gone from the page. It also won’t tell you whether a link is nofollow.

So treat it as Google’s view of your site, not the truth about your site. A post you published last week probably isn’t in there yet. And if your page isn’t indexed, it may not show up at all.

Method 2: search your own content for the URL

Your links live in the database, in each post’s content. So you can just search for the address.

Without installing anything

The search box on Posts > All Posts doesn’t only search titles. WordPress core searches the title, excerpt and content of each post. Type the page’s slug (for example old-pricing-page) and hit Search Posts. Then do the same on Pages > All Pages, because each list only searches its own post type. Custom post types have their own lists too.

One catch: WordPress treats a search term that starts with a hyphen as “exclude this word”. Slugs rarely start with one, but don’t type -something.

With WP-CLI

If you have shell access, wp db search searches the database directly and shows a bit of text around each match, so you can see the actual link:

wp db search "old-pricing-page" wp_posts --before_context=60 --after_context=20

Change wp_posts if your table prefix isn’t wp_. The search is case-insensitive by default, and --stats adds a count of matches. Expect hits on revisions and on the page itself (its own post_name field), so look at the row type before you panic about the numbers.

If you’d rather use a plugin, Better Search Replace (under Tools) has a “dry run” mode that tells you how many fields contain a string without changing anything. In the free version that’s a count, though, not a list of which posts. Useful as a yes/no check, not much more.

What to search for

Here’s the part people get wrong. A link to the same page can be written several ways, and a plain search only finds the exact text you type. Run a few searches:

Search for Catches
The slug alone: old-pricing-page Full URLs, relative links like /old-pricing-page/, http and https, with or without www. Usually the best single search.
The path: /pricing/old-pricing-page/ Same, with fewer false hits if the slug is a common word.
?p=123 and page_id=123 Old-style links by ID (use your page’s ID, shown in the edit screen URL). Shortlinks look like this.
Any previous slug Links written before you last renamed the page. They still work because WordPress redirects old slugs, so nobody noticed.

Honest limits. A content search won’t find links in menus, widgets or your theme’s header and footer, because those aren’t stored in the post content. Page builders can keep their content somewhere else entirely (often in post meta, sometimes with escaped slashes), so the admin search can miss those pages. Searching the slug alone with wp db search across wp_postmeta as well as wp_posts is the safer bet there. And a search finds text, not links: if the slug appears in a sentence, it’ll match too.

Method 3: crawl the site with Screaming Frog

A crawler looks at your site the way a visitor does. It follows every link it can see, in menus, sidebars and footers as well as content, so it fills the gap Method 2 leaves.

The Screaming Frog SEO Spider is free up to 500 URLs per crawl, which covers most small blogs. (Above that it’s a paid licence.) Enter your homepage, start the crawl, and when it’s done:

  1. Go to the Internal tab and find your page in the top window. The Inlinks column shows how many internal links point at it.
  2. Click the URL so it’s highlighted.
  3. Open the Inlinks tab in the bottom window. It lists every internal link pointing to that URL, with columns for From, Anchor Text, Follow, Link Position (content, nav, footer and so on) and more.

Limits: it only finds pages it can reach by following links, so a truly orphaned page won’t appear unless you add it to the crawl another way. Drafts and private posts are invisible to it. And over 500 URLs, the free version just stops.

What to do with the list

Before you delete a page. Every link on the list becomes a dead end or a redirect hop the moment the page goes. For each linking post, decide: point the link at a better page, or remove it. Then set up a 301 redirect for anything you can’t control (bookmarks, other sites, old emails). If the list is empty and Search Console shows no traffic, deleting is low risk.

Before you change a slug. WordPress redirects the old slug for you, so links won’t break. But every internal link still points at the old address and goes through a redirect. Update them while you have the list in front of you. We walk through the rest of that process in how to change a permalink without losing traffic.

When the page gets no traffic. If the list has zero or one entry, that’s probably part of the answer. Pick two or three related posts that do get visits and add a link from a sentence where it fits. If you find several pages in the same state, our guide to finding orphaned pages covers the site-wide version.

Check the anchor text while you’re there. If ten posts all link to the page with “click here”, or with wording that no longer matches what the page is about, fix those now. You won’t open these posts again for a while.

Seeing it inside WordPress: JnK Linkweave

Full disclosure: JnK Linkweave is ours.

The free core adds a “Links in / out” column to the WordPress Posts and Pages lists. For every post it shows how many internal links point to it and how many it has, and hovering the number says “N internal links point here”. So the “does anything link to this?” question gets answered right in the list you already use.

For the “which posts?” part, the free Inbound links screen has a link map with a Graph view. Every post is a dot, grouped into topic islands. Click a dot and you see the posts that link to it and the posts it links to, with Open post and Edit post. You can find a post by title, or show only the posts with no links in. Adding links to a page from several posts in one click is in Pro.

It’s a free download from our site. Same caveat as Method 2: it reads post content, so links in your menus and footer are still a job for a crawler.

Frequently asked questions

WordPress has no built-in “what links here” view. Search the page’s slug in the Posts and Pages admin lists (WordPress searches post content), use the Links report in Google Search Console and click the page under Internal links, or crawl the site with Screaming Frog and open the Inlinks tab for that URL. Using two of these together catches most links.

No. Google says the Links report shows a sample of links and is not a complete list. Tables are capped at 1,000 rows, recent links may not appear yet, and some links shown may already have been removed. Use it as a starting point, then confirm with a content search or a crawl.

Get the full list of posts that link to it, including links by old slug or by page ID, and links in menus or footers. Update or remove each link, then add a 301 redirect from the deleted page to the closest relevant page so outside links and bookmarks still land somewhere useful.