Turn on Link Graph under WP Visibility → Settings → Modules, load any admin page once, then run wp visibility links rebuild. After that, wp visibility links orphans lists published posts that no other post links to, hubs lists the most linked-to posts, and suggest <id> proposes posts worth linking from a given one. In this release the report is available from WP-CLI, REST and a connected assistant; there is no screen for it in the admin.
What it records
The module keeps a table of which published post links to which, and how many times. It reads the links inside post content when a post is saved:
- Links to your own site count: full URLs on your host, protocol-relative ones, and root-relative paths such as
/about/. - External links, anchors within the page,
mailto:and other schemes, links to drafts, and links a post makes to itself are ignored. - Menus, widgets, footers and theme templates are not read. A page linked only from the menu counts as an orphan here.
- Only published posts of public post types are indexed. Unpublishing or deleting a post removes its links.
It adds one parse per save, which is why the module is off by default.
Build the index
Posts saved before the module was on are not in the table until you rebuild:
wp visibility links rebuild
wp visibility links rebuild --batch=100
The rebuild shows a progress bar and ends with the number of posts and links recorded. Over REST, POST /wp-json/wpvis/v1/links/rebuild processes 200 posts per call and returns what remains; repeat it with the returned offset until complete is true.
The reports
wp visibility links orphans
wp visibility links hubs --limit=10
wp visibility links suggest 123
| Report | What it lists | Columns |
|---|---|---|
orphans |
Published, indexable posts with no inbound internal link | id, title, url, outbound_count |
hubs |
The most linked-to posts | id, title, url, inbound_count, inbound_hits |
suggest <id> |
Posts worth linking from post <id> |
id, title, url, reason |
orphans refuses to run until one rebuild has finished, because a partial index would list half the site. Noindexed posts are left out of it on purpose. --format takes table, csv, json, yaml or count; --limit defaults to 100 for orphans, 20 for hubs and 10 for suggestions.
Suggestions are computed on the spot from shared title words and a shared category or tag, with no AI involved. The reason column says which: “shares: pruning, tomatoes” or “same category”. Posts the source already links to are left out.
GET /wp-json/wpvis/v1/links/report returns the orphans, hubs, dead ends (posts with no outbound links) and totals in one response, and needs manage_options. With the Assistant connection module on, the “Get internal link graph” and “Suggest internal links” abilities return the same data to an assistant.
Act on it
An orphan is not always a problem. A thank-you page or a landing page for ads should have no inbound links. For an orphan that should be found, add a link to it from two or three related posts, in the sentence where it helps the reader. Then save those posts and the orphan drops off the list.
Behavior checked against WP Visibility 2.10.3.