Internal Link Counter and Orphaned Content
See internal links out, external links out and posts linking in for every post on the Posts screen, and filter to the posts nothing links to.
On this page
- Read the numbers
- Find orphaned content
- What counts as a link
- What "orphaned" does not tell you
- Fix an orphan
- When the counts update
- Switch it off, or recount
- Limits
- Where the data is kept
- Performance
- FAQ
- A post is linked from my menu. Why is it marked orphaned?
- I added a link but the count did not change. Why?
- Do external links include nofollow links?
- Does the number of internal links affect my SEO score?
- Is this the same as the orphan check in the site audit?
- Related reading
Internal links are how visitors and crawlers move from one of your pages to the next, and a post that nothing links to is easy for both to miss. From version 0.0.30, Hydrogen SEO counts the links in your published content and shows three numbers for every post on the Posts screen: links out to your own pages, links out to other sites, and how many of your posts link in. A new Orphaned filter lists the posts with no links in. Counting is on by default, free, and needs no account.
Read the numbers
In the SEO column of Posts → All Posts, Pages → All Pages and other post type lists, each published post has a row of three counts under its indexing status:
| You see | Hover text | Meaning |
|---|---|---|
↳ 4 | 4 internal links out | The post's content links to 4 different addresses on your own site |
↗ 2 | 2 external links out | It links to 2 different addresses on other sites |
↙ 3 | 3 posts link here | 3 other published posts link to this one |
↙ 0 in amber | Orphaned: no other published post links here | Nothing in your published content links to it |
Drafts, scheduled and private posts show no counts, because only published content is counted. A published post that has not been reached yet shows Links not counted yet.
Find orphaned content
- Open Posts → All Posts (or Pages, or another post type).
- In the All SEO dropdown, choose Orphaned (no internal links in) and click Filter.
The list now holds every published post of that type that no other published post links to. The filter combines with the category and date filters beside it, so you can work through one category at a time.
While the first count of an existing site is still running, a notice above the list says so: until it finishes, the list can include posts that are linked from content not yet read.
The page set as your homepage and the page set as your posts page under Settings → Reading are never listed as orphaned. Your site's navigation reaches them by definition.
What counts as a link
The counter reads the <a href> links saved in each post's content.
- Each address counts once per post. Linking to the same page three times is one link.
- Variants of one address are one link.
/about/,https://yoursite.com/aboutand/About#teamare the same page: the trailing slash, capital letters, query string and fragment are ignored.?p=12and?page_id=12are kept, since there the query names the post. - The www and non-www forms of your address are both your site.
https://www.yoursite.com/about/andhttps://yoursite.com/about/each count as an internal link, whichever form the site itself uses. - A link to the post itself is not counted.
- These are not links to pages and are skipped:
#sectionanchors,mailto:andtel:links, relative paths, and addresses underwp-admin,wp-contentand similar, which covers links to uploaded images and PDFs. - "Posts link here" counts posts, not links. A post that links to you twice, by two forms of the address, is one post.
- Only published content counts on both sides. A link from a draft does not rescue an orphan, and a link to a draft counts as an internal link out but not as a link in until that post is published.
What "orphaned" does not tell you
The counter looks at links written into content. It does not see links that your theme or WordPress prints around the content:
- navigation menus, sidebars, widgets and footers
- category, tag, author and date archive listings, and the blog index
- related-post lists and query blocks that are built when the page loads
- content a page builder keeps outside the post's content field
So an orphaned post may still be reachable by a visitor, through a category archive for example. What the label tells you is that no post or page of yours mentions it in its text, which is the kind of link that carries context and the kind you control when writing. Whether a page can be reached at all is a different question, answered by crawling the site from the homepage. The site audit also reports orphan pages, as part of a wider check you run on demand.
Fix an orphan
For each post in the filtered list, decide which of three things it is:
- Still useful. Search your site for posts on the same subject (the search box on the Posts screen works) and add a link from two or three of them, in a sentence where the reader would want it. Save those posts, and the orphan's count updates.
- Superseded. Redirect it to the post that replaced it with the Redirection Manager, then unpublish it.
- Not meant to be found. Thank-you pages and campaign landing pages are often orphans on purpose. Leave them, and consider noindex if they should stay out of search.
A longer method, with examples, is in orphan pages in WordPress: how to find and fix them.
When the counts update
- When a published post is saved, in the editor, Quick Edit, through the REST API or by scheduled publishing, its links are read again. If they changed, the posts it started or stopped linking to get their "link here" number refreshed in the same save.
- When a post is unpublished, trashed or deleted, its links are removed and the posts it linked to are refreshed.
- When a post is published or its slug changes, links that already pointed at its address are matched to it.
- Existing content is counted in the background after you update to 0.0.30: 50 posts at a time through WordPress's scheduled tasks, starting the next time someone opens wp-admin. It resumes where it stopped if interrupted.
- After the plugin is deactivated and activated again, the count starts over by itself, because saves made while it was inactive were not recorded.
On a site where scheduled tasks do not run, or to finish a large site quickly, use WP-CLI:
wp hydrogen-seo links recount # count every published post again, now
wp hydrogen-seo links status # whether counting is on, and how far the count is
Switch it off, or recount
Hydrogen SEO → General → Links has the Count Internal Links switch. While it is on, a line under it shows how far the current count is, next to a Recount links button. The switch saves as soon as you click it. Switching it off stops all counting and hides the counts and the Orphaned filter; what was stored is kept. Switching it back on recounts every post, since saves made in between were not recorded.
Limits
- At most 500 links are kept per post, and at most 100 internal links per post are matched to the post they point at. Links beyond that still count as internal links out, but do not add to another post's "link here" number.
- All public post types except attachments are counted. Developers can change the list with the
hydrogen_seo_link_counter_post_typesfilter in the filters reference. - The counts appear on the list screens of post types that have the SEO column, for the users who can see that column.
Where the data is kept
Links are stored in one database table, {prefix}hydrogen_seo_links, with one row per link in a published post, and each post's three counts are stored as post meta so the Posts screen can show them without extra queries per row. Nothing is sent anywhere. Deleting the plugin removes the table and the counts.
Performance
Nothing runs on the front end of your site. The work happens when a post is saved and in the background count. Saving a published post whose links did not change costs one database query and writes nothing. The Orphaned filter is one indexed lookup per listed post.
FAQ
A post is linked from my menu. Why is it marked orphaned?
Menus are not part of any post's content, so they are not counted. The label means no post or page links to it in its text. Decide whether a menu link is enough for that page; for a page such as Contact it usually is.
I added a link but the count did not change. Why?
The linking post has to be saved and published. Check too that the link is a full address or starts with /: a relative path such as page-2/ is skipped. If the target's address goes through a redirect, link to the final address.
Do external links include nofollow links?
Yes. The count is of links in the content, whatever their rel attribute.
Does the number of internal links affect my SEO score?
The SEO score has its own links check, which looks at the links in the post being scored. The counts here are separate and add the view the score cannot have: who links to the post.
Is this the same as the orphan check in the site audit?
No. The site audit is a report you run from the Dashboard, alongside its duplicate, cannibalisation and broken-link checks. The counter is kept up to date as posts are saved and sits on the screen where you manage posts, so it suits routine work, and the audit suits a periodic review.
Related reading
- SEO on the Posts screen
- Pillar content, to mark your most important pages and list the ones with few links in
- Site-wide audits
- On-page SEO analysis
- The redirection manager
- Internal linking strategy