How to Find Internal Links Pointing to a Page

By · Published

To find the internal links pointing to a page, open Search Console’s Links report, choose “Top linked pages” under Internal links, and click the page to see which of your pages link to it. For a complete list with anchor text, crawl the site and filter the crawl’s links to the target URL. Search Console gives you Google’s sample; a crawl gives you every link, as of today.

If you’re looking for links from other websites instead, that’s a backlink question, and I covered it in how to find links to your website.

Internal links are how search engines discover pages and how they judge which pages you think matter. The usual reasons to check a single page’s inlinks:

  • A page you care about ranks badly and you want to know how many pages link to it, and with what anchor text.
  • You’re about to delete, merge or redirect a page and need to update every link to it first.
  • A page shows up in a crawl as a 404 or a redirect and you need to know where the links are.
  • A new page needs links from the right existing pages, and you want to see which related pages already link to its siblings.
  1. Open Search Console for the property.
  2. Go to Links in the left menu.
  3. Under Internal links, click More next to “Top linked pages”.
  4. Find the page in the table (use the filter icon to search) and click it.

You get a list of linking pages. It’s useful and free, with three limits. It’s a sample, not necessarily every link. It’s Google’s last crawl, which can be weeks old. And it shows no anchor text per link, so you can’t see whether those links say “pricing” or “click here”.

A crawler records every link on every page, so the inlinks to any URL are a filter away. With bseoa, crawl once and export JSON:

black-seo-analyzer \
  --url-to-begin-crawl https://example.com \
  --disable-external-links \
  --output-type json \
  --output-file crawl.json

Then list every page that links to the target, with the anchor text it uses:

TARGET="https://example.com/pricing"

jq -r --arg t "$TARGET" '
  .pages[] | .url as $src
  | .complete_analysis.link_analysis[]?
  | select(.url == $t or .url == ($t + "/"))
  | [$src, .anchor_text] | @tsv' crawl.json | sort -u

Link URLs in the crawl are resolved to absolute URLs, so relative links like /pricing match too. The select also catches the trailing-slash variant, which is the most common reason a link list comes up short.

To get the inlink count for every page at once, which is the more useful view for spotting weak pages:

jq -r '
  [.pages[] | .url as $src
   | .complete_analysis.link_analysis[]?
   | select(.is_internal) | {src: $src, dst: .url}]
  | unique | group_by(.dst)
  | map([.[0].dst, length]) | sort_by(.[1]) | .[]
  | @tsv' crawl.json > inlinks.tsv

unique removes duplicate links from the same page, so a page that links twice to the target counts once. The top of the file is your least-linked pages; the bottom is your navigation.

If the site builds menus or related-post blocks with JavaScript, add --spa to the crawl. Otherwise those links don’t exist as far as the crawler is concerned, and the counts will be wrong in the direction that matters.

Method Complete Anchor text Best for
Search Console Links Sample No Quick check on a site you own
Crawl and filter Yes, for linked pages Yes Audits, migrations, redirects
site: search for the URL or title No No A rough look at someone else’s site
Database or file search Yes, for body content Yes Finding links inside post bodies

Searching the content. On WordPress, a link inside post content is just text in wp_posts.post_content, so a database search finds it even on unpublished drafts:

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_content LIKE '%example.com/pricing%'
   OR post_content LIKE '%href="/pricing%';

On a static site or a docs repo, grep -rn '/pricing' content/ does the same. This misses links in menus, widgets and templates, which a crawl catches, so use both before you delete a page.

Once you have the list, check three things.

Count. Your most important pages should be among your most linked. If a money page has three internal links and a two-year-old announcement has forty, your navigation and related-content blocks are pointing the wrong way.

Anchor text. Links that describe the target help search engines and users. “Pricing” or “Agency license pricing” beats “click here”. bseoa flags generic anchor text (“click here”, “read more”, “learn more”, “more info”) and pages that link the same URL with inconsistent anchor text, which usually means one of the links was written without thinking about it.

Status. Every link should point at the final URL with a 200 response, not at a redirect. After a migration, filter the inlinks list to links that hit a 301 and update them at the source.

If the filter comes back empty, the page is an orphan: it exists, but no crawlable page links to it. A crawler that starts at the home page won’t have found it at all, so you won’t see it in the crawl either. You find orphans by comparing the crawl against the sitemap, analytics and Search Console; how to find orphan pages has the commands. For the wider question of which pages exist in the first place, start at how to see all pages on a website.

The quick answer

Search Console’s Links report for a fast look. A crawl filtered to the target URL for the complete list with anchor text. A content search before you delete anything. If you want to run the crawl-and-filter version on your own site, the bseoa free trial runs for 14 days with every feature and no page limit.

-Sethers

Discover hundreds of SEO Issues in Seconds

Without Monthly Subscriptions

Comprehensive technical SEO analysis powered by ML and 16 specialized modules. Optional AI-powered insights from Claude, GPT-4, or Gemini. Get actionable insights in seconds, and never pay monthly fees again.

Download Free Trial

I use AI to generate images for my posts and for general editing, updates, and ironically SEO purposes. I used to draw all of the images for my personal blog (taleas) myself, but as the volume of content I produce has increased, I've turned to AI tools to help create visuals that complement my writing. I go out of my way to generate images that look strange, and don't represent real people. If you ever want to chat about my use of AI, please reach out.