seo-internal-linking — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-internal-linking (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Build the internal link graph that routes authority from blog content to commercial pages, leaves zero pages orphaned, and makes the site hierarchy legible to search engines and, through their indexes, to AI engines.
If the working environment contains an Obsidian vault or any local knowledge base (a folder of .md notes, often with a .obsidian directory), read the relevant notes before acting: brand and product facts, target keywords, competitors, and the SEO action log of what was already tried. Ground every recommendation in that context instead of asking the user for facts the vault already holds. At the end of the session, append the actions taken to the vault's SEO action log so the next session starts informed. Vault structure, read-first and write-back protocols: the obsidian-brain skill.
Route adjacent jobs to their own skills:
List every page that sells: products, services, collections, pricing, signup, contact. Rank by business value:
Why: internal linking is authority budgeting; you cannot route equity before deciding where it must land. Articles are donors, money pages are receivers.
Compare the full sitemap URL list against a crawl that starts from the homepage and follows links only. Any URL present in the sitemap but unreachable through links is an orphan. For the crawl and link graph collection, run the bundled audit script from the seo-geo-audit skill (scripts/seo_audit.py).
Orphan causes to check explicitly:
Why zero tolerance: search engines discover and re-crawl through links; a sitemap entry alone gets a page crawled rarely, indexed unreliably, and ranked almost never.
For every blog article, assign the 3-5 money pages it should link to, matched on topic:
Why: articles capture informational traffic; the matrix is the mechanism that converts that traffic and authority into commercial rankings.
Plan a retroactive re-linking pass. You cannot link from an article to others that do not exist yet, so a corpus built over time accumulates missing cross-links. Schedule a dedicated pass once a batch is published (and re-run it as the corpus grows) to add the article-to-article links that were impossible to place at writing time. This is a recurring maintenance task, not a one-off (field heuristic from 115+ agency audits).
Rewrite anchors to be descriptive, varied, and natural: a mix of exact keyword, partial match, and descriptive phrases (distribution table below). Eliminate sitewide repetition of one exact-match anchor and systematic "click here".
At the bottom of each service or category page, link 2-3 topically related articles; each of those articles links back to the service page and to its siblings. Scale to hub and spoke on large sites (structures below).
Example for a plumbing company:
Re-crawl and confirm: zero orphans, every priority money page has at least 3 inbound internal links from articles, anchors varied, links visibly styled, breadcrumbs sitewide, priority pages within 3 clicks of the homepage.
| Rule | Standard | Why |
|---|---|---|
| Links per article | 3-5 internal links toward money pages (field heuristic from 115+ agency audits) | Articles capture informational traffic; links pass that authority to the pages that convert. An article linking only to other articles keeps equity circling in an informational loop that never sells |
| Link visibility | Underlined plus a distinct color | A link styled like body text is clicked by no one and is weaker as a navigation signal; internal click-through is a usage signal. If users cannot see it, it does not work |
| Orphan pages | Zero tolerated | A page with no inbound internal link is rarely crawled, often not indexed, and invisible everywhere, including to AI engines that retrieve through search indexes |
| Blog location | /blog subfolder, never a subdomain; linked from menu or footer | Authority consolidates on one domain. Google states subdomains and subfolders both work; the subfolder rule is a field heuristic from migration outcomes, where consolidation onto the main domain preceded recoveries |
| Anchor variation | Mix exact, partial, descriptive, and branded anchors; never the same exact-match anchor repeated sitewide | Dozens of identical exact-match anchors look manipulative and fall under link spam patterns; varied anchors describe the target naturally |
| Generic anchors | "Click here" and "read more" never as the dominant pattern | Anchor text is the description of the target page that crawlers and screen readers consume; a generic anchor wastes the signal entirely |
| Cannibalization | 1 keyword = 1 page | Two pages on the same intent split clicks, links, and ranking signals, and Google alternates between them. Test and merge procedure below |
| Breadcrumbs | On every page, with BreadcrumbList markup | A crawlable hierarchy on every page; feeds entity and section understanding for search and AI engines. Markup details: seo-schema-markup |
| Table of contents | On every long article | Anchor links are internal links too: they expose section structure to crawlers and AI extractors and can produce jump links in results |
| Menu | The most important pages only | Sitewide links carry the most internal weight; every addition dilutes every existing entry. The menu is a budget, not a sitemap |
| Footer | Secondary and legal pages | Keeps sitewide equity flowing to support pages without bloating the menu |
| Click depth | Priority pages within 3 clicks of the homepage (field heuristic) | Depth is the site's own statement of importance; pages buried 5+ clicks deep are crawled less often and ranked as minor |
Target distribution for the inbound anchors of any single page (field heuristic from 115+ agency audits):
| Anchor type | Share | Example for /services/boiler-installation |
|---|---|---|
| Descriptive phrase | Most of the mix | "what a professional boiler installation includes" |
| Partial match | Common | "boiler installation cost", "installing a new boiler" |
| Exact match | Small minority | "boiler installation" |
| Branded or page name | Some | "our installation service" |
| Generic | Near zero | "click here", "read more" |
Why variation matters: anchor text is the engine's description of the target page. Identical exact-match anchors repeated at scale match the link scheme patterns in Google's spam policies, and they carry less information than varied natural descriptions.
| Placement | Weight | Use for |
|---|---|---|
| In-content, inside the main body | Highest | Article-to-money-page links |
| Bottom-of-page related block | Medium | Mini-silo article lists |
| Menu | Sitewide, highest aggregate | Top money pages |
| Footer | Sitewide but discounted | Secondary and legal pages |
| Sidebar | Low | Do not rely on it |
Why: Google's reasonable surfer model weights links by their probability of being clicked; a contextual link inside the content a user is reading outweighs a template link repeated on every page.
| Site size | Structure | Implementation |
|---|---|---|
| Niche site (under ~50 pages) | Mini-silo | 2-3 related articles linked at the bottom of each service page; each article links back to the service page and to its siblings. This is sufficient; do not over-engineer |
| Large site | Hub and spoke | One pillar page per topic; satellite articles link UP to the pillar and across to sibling satellites; the pillar links down to all satellites |
Hub and spoke example for a SaaS:
Direction matters: the page you want to rank (the hub or the service page) must RECEIVE the links. A pillar that only links out to satellites without receiving links back concentrates nothing. Keep outbound links disciplined too: link each target once per page, at the most natural spot; dozens of internal links from a single page dilute every one of them.
Distinct from the satellite ARTICLES of an in-site silo above: this is a second, independent website on the same theme, positioned as the reference of the niche (a Wikipedia-plus-comparator hybrid). It lists the actors and subjects of the sector, captures educational and comparison traffic, and links out to the commercial site as the cited example. Treat it as a separate property with its own internal silo, then a controlled set of editorial links pointing to the money site.
Signals that two pages cannibalize:
Procedure:
Caution: merge only on identical intent. Two pages with similar words but different intents (one informational guide, one commercial service page) are not cannibalizing; they should coexist and link to each other.
When a page is indexed yet gets no impressions or clicks, check in this order:
Why this order: architecture problems are cheaper to fix than content problems and are the usual culprit when an indexed page underperforms sitewide patterns.
Deliver every internal linking engagement as this plan:
# Internal linking plan: <domain>
## 1. Money pages (ranked by business value)
| Priority | Page | URL | Inbound internal links today | Target |
|---|---|---|---|---|
| 1 | <name> | <URL> | <n> | 3+ from articles |
## 2. Orphan pages (sitemap vs crawl)
| URL | In sitemap | Inbound links | Fix |
|---|---|---|---|
| <URL> | yes | 0 | Link from <page> with anchor "<anchor>" |
## 3. Article-to-money-page matrix
| Article | Money page target(s) | Anchor | Placement in article |
|---|---|---|---|
| <article URL> | <money page URL> | <descriptive anchor> | <section> |
## 4. Mini-silos / clusters
### <Service or topic A>
- Hub page: <URL>
- Supporting articles: <2-3 URLs, linked at the bottom of the hub, each linking back and to siblings>
## 5. Navigation changes
- Menu: <pages to keep, add, remove, with reasons>
- Footer: <secondary and legal pages>
- Breadcrumbs: <pages missing them; BreadcrumbList via seo-schema-markup>
## 6. Cannibalization merges
| Keep | Merge and 301 | Evidence (SERP overlap) |
|---|---|---|
| <URL> | <URL> | <both rank for "<keyword>", same results> |
## 7. Link styling
- Confirm links are underlined with a distinct color sitewide.Every recommendation must name the exact source page, target page, and anchor text. "Add more internal links" without targets is not a deliverable.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.