Orphan Pages and Audits

How to Find Orphan Pages in WordPress Without a Crawler

Selvakumar Duraipandian
· 8 min read

Most SEO guides give you the exact same recipe for finding orphan pages: download a desktop crawler like Screaming Frog, run a full site crawl, export your XML sitemap, open both files in Excel, and run a VLOOKUP formula to spot URLs missing in the crawl.

If you run a WordPress website, that entire workflow is backwards.

An external crawler works from the outside looking in. It visits your pages through hyperlinks just like Googlebot does. But here is the catch: by definition, an external crawler cannot discover an orphan page by crawling links. It can only find an orphan page if you manually feed it a secondary source like your sitemap or Google Analytics.

Meanwhile, every single blog post, page, URL slug, and hyperlink on your site is already indexed in your WordPress MySQL database. You do not need to wait three hours for an external crawler, burn through software licenses, or wrestle with spreadsheets.

In this guide, you will learn how to find orphan pages in WordPress directly—using native database queries, lightweight tools, and dedicated WordPress solutions—in a fraction of the time.

What is an orphan post in WordPress?

An orphan post is a published WordPress post or page that has zero incoming contextual internal links from any other page on your website.

As we covered in our foundational guide on what orphan pages are and how they hurt your SEO, search engines rely heavily on internal links to establish page authority (PageRank) and discover content relationships. When a page has no incoming links, it exists in an SEO vacuum:

  • Googlebot rarely crawls it: Search engines prioritize URLs that receive frequent internal link signals.
  • It lacks link authority: Without incoming equity from your authoritative pillar posts, the post cannot compete on high-intent SERPs.
  • Readers never discover it: Visitors reading related articles will never see a recommended path leading to the orphan post.

Why traditional crawlers struggle with WordPress sites

Desktop and cloud web crawlers are powerful tools for technical audits, but using them solely to find unlinked WordPress posts introduces several practical bottlenecks:

  1. The Sitemap Dependency: Because an orphan page has no links pointing to it, a crawler cannot find it through site navigation. You must configure the crawler to fetch your XML sitemap, connect your Google Search Console API, or upload URL lists manually.
  2. Server Load and Rate Limits: Running a 10,000-URL crawl on managed or shared WordPress hosting can easily spike CPU usage, trigger PHP worker timeouts, or get your IP temporarily blocked by firewalls like Cloudflare or LiteSpeed.
  3. Staging and Local Environments: If you are staging a site redesign or building content locally in MAMP, Docker, or LocalWP, external cloud crawlers cannot reach your localhost or password-protected staging site without complex tunnels.
  4. Cost and Complexity: Popular SEO crawlers cost between $250 and $1,000+ per year. For content creators, small agencies, and bloggers, that is an unnecessary overhead for a task your own database can answer in seconds.

Method 1: The 10-second database query (phpMyAdmin or Adminer)

If you have access to phpMyAdmin, Adminer, or a database command line, you can find unlinked posts using a single SQL query. WordPress stores all post content in the wp_posts table under the post_content column.

Here is an SQL query that finds published posts whose URL slug does not appear inside the content of any other published post:

-- Find published WordPress posts with no incoming links from other published posts
SELECT p1.ID, p1.post_title, p1.post_name, p1.post_date
FROM wp_posts p1
WHERE p1.post_type = 'post'
  AND p1.post_status = 'publish'
  AND NOT EXISTS (
    SELECT 1 
    FROM wp_posts p2 
    WHERE p2.post_type = 'post' 
      AND p2.post_status = 'publish' 
      AND p2.ID != p1.ID 
      AND p2.post_content LIKE CONCAT('%', p1.post_name, '%')
  )
ORDER BY p1.post_date DESC;

How this query works:

  • p1 selects all published posts you want to audit.
  • The NOT EXISTS subquery checks if the post slug (post_name) exists anywhere inside the body text of another published post (p2.post_content).
  • If no match is found, the post is returned as an unlinked candidate.

Note: If your database uses a custom table prefix (other than wp_), replace wp_posts with your specific prefix, such as wp_custom_posts.

Method 2: Fast audit via WP-CLI (For developers and power users)

If you manage your WordPress site via SSH, WP-CLI provides an ultra-fast way to inspect your inventory without touching phpMyAdmin.

You can run a quick evaluation command that loops through published posts and flags those without mentions in other posts:

wp eval '
$posts = get_posts(["post_type" => "post", "post_status" => "publish", "numberposts" => -1, "fields" => "ids"]);
$orphans = [];

foreach ($posts as $id) {
    $slug = get_post_field("post_name", $id);
    global $wpdb;
    $linked = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_type = %s AND post_status = %s AND ID != %d AND post_content LIKE %s",
        "post", "publish", $id, "%" . $wpdb->esc_like($slug) . "%"
    ));
    if (!$linked) {
        $orphans[] = get_the_title($id) . " (ID: " . $id . ")";
    }
}

echo "Total unlinked posts found: " . count($orphans) . "
";
print_r($orphans);
'

Because WP-CLI runs directly against PHP and MySQL inside the server environment, it evaluates hundreds of posts in just a couple of seconds with zero HTTP traffic.

Method 3: Check Google Search Console’s Links report (Free)

If you prefer not to touch SQL code or command lines, Google Search Console provides a completely free way to find pages that Google knows about but has recorded few or zero internal links for:

  1. Log in to your Google Search Console dashboard.
  2. In the left sidebar, scroll down to Links.
  3. Under the Internal links section, click More.
  4. Click the Internal links column header to sort the table in ascending order (smallest numbers first).

URLs showing 0 or 1 internal link (often just a category or archive link) are prime candidates for an internal linking refresh.

Method 4: Automated in-dashboard detection with LinkCortex

While SQL queries and GSC reports give you raw lists, they don’t help you with the most time-consuming part of the job: figuring out where and how to link them.

This is where a native WordPress plugin like LinkCortex changes the workflow:

  • Instant Database Scanning: LinkCortex analyzes your internal link graph directly in your WordPress database—no crawlers, no rate limits, and no third-party exports.
  • Gutenberg Block Safety: Traditional search-and-replace scripts can break modern block markup. LinkCortex leverages WordPress native HTML APIs to inject links safely without corrupting serialized JSON block attributes.
  • AI-Powered Relevance Suggestions: Once an orphan page is detected, LinkCortex scans your existing published articles and suggests exact, natural anchor text sentences where a contextual link fits perfectly.
  • One-Click Remediation: Review the suggested links and approve them in seconds right from your WordPress editor screen.

Crawler vs. SQL query vs. WordPress plugin

Feature Desktop Crawler Direct SQL Query LinkCortex Plugin
Setup Speed Slow (requires install, sitemap sync) Instant (run 1 SQL command) Instant (1-click scan inside WP)
Server Impact High (hundreds of HTTP requests) Extremely Low (single indexed query) Minimal (asynchronous DB indexing)
Works on Local/Staging No (needs public URL or tunneling) Yes (runs on any MySQL instance) Yes (runs natively in WP environment)
Cost $250 – $1,000+/year Free Free / Open source
Fixes Links Automatically No (manual copy-paste) No (manual copy-paste) Yes (AI suggestions & 1-click insertion)

What to do after you find your unlinked posts

Once you compile your list of unlinked WordPress posts, follow this simple 3-step action plan:

  1. Check Search Intent and Value: Is the post still accurate, high-quality, and worth ranking? If it is outdated or thin, decide whether to update it, redirect it (301) to a relevant post, or remove it.
  2. Find 2–4 Relevant “Parent” Posts: Identify high-authority posts on your site that touch on related topics. For example, if you have an unlinked post on keyword research, link to it from your broader SEO strategy guide.
  3. Use Descriptive Anchor Text: Avoid lazy anchors like “click here” or “read this post”. Use natural phrases that tell both Google and your readers exactly what they will find when they click through.

Frequently asked questions

Does an XML sitemap prevent a page from being an orphan?

No. An XML sitemap helps search engines discover that a URL exists, but it does not pass PageRank or contextual link equity. Google treats a page with no internal links as low-priority, regardless of whether it is listed in your sitemap.

Do category and tag pages count as internal links?

Technically yes, but taxonomy links provide very weak contextual signals. An in-content hyperlink embedded inside a relevant paragraph carries vastly more SEO weight than a link in a category pagination list.

How often should I audit for orphan pages in WordPress?

For active blogs publishing multiple articles a week, a monthly internal link audit is ideal. For smaller sites, running a scan once every quarter or whenever launching a new content cluster is sufficient.

Final thoughts

Finding orphan pages in WordPress does not require expensive crawling subscriptions or complicated spreadsheet macros. By leveraging your WordPress database directly or using an automated internal linking tool, you can surface lost content in seconds and restore valuable search visibility to your site.

About the author
Selvakumar Duraipandian

I am a web developer who is passionate about building useful technology products and solving real-world problems through technology. I am also one of the organizers of techKoodaram, a non-profit technology volunteer community focused on building a strong tech ecosystem in the Virudhunagar and Tenkasi districts of Tamil Nadu. Through techKoodaram, I work with students, developers, and technology enthusiasts to promote knowledge sharing, AI awareness, mentorship, and technology-driven social impact. I enjoy building side projects, exploring AI and SEO, and turning ideas into practical solutions that create value for people. I believe in continuous learning, collaboration, and building products that solve meaningful problems.

Recommended Reading

Explore more practical guides on internal linking, SEO architecture, and content optimization.