internal-links
Skill0 starsChanged 2 days agoMITView on GitHub
Find orphan and weakly linked pages from the sitemap and a crawl sample (links), check anchor text against Google's link best practices, and add contextual internal links without spam. Covers crawlable links, descriptive anchors, where links belong, hub-to-spoke linking and how to measure the effect. Use when the user says 'internal linking', 'orphan pages', 'add internal links', 'anchor text', 'pages with no links', 'link my new post', 'site architecture links'.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- vishal1610kamal/second-braintheir own version, first seen Nov 8, 2026
- Pagepro/nexitytheir own version, first seen Nov 8, 2026
- RightBlogger/bloggingskillstheir own version, first seen Nov 1, 2026
- powerczuk/seo-machinetheir own version, first seen Sep 3, 2026
- agencia-conversion/agentic-seo-skillstheir own version, first seen May 29, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- agencia-conversion/agentic-seo-skills★ 51same name
- Pagepro/nexity★ 19same name
- RightBlogger/bloggingskills★ 4same name
- powerczuk/seo-machine★ 0same name
- vishal1610kamal/second-brain★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- agent-readySkill
- ai-citationsSkill
- ai-crawlersSkill
- ai-logsSkill
- ai-trackerSkill
- backlinksSkill
- cannibalizationSkill
- canonicalsSkill
- citabilitySkill
- comparison-pagesSkill
- competitorsSkill
- content-briefSkill
- content-decaySkill
- content-qualitySkill
- core-web-vitalsSkill
- ecommerce-seoSkill
- ga4-aiSkill
- ghost-publishSkill
- gsc-bingSkill
- hreflangSkill
- imagesSkill
- indexingSkill
- llms-txtSkill
- local-seoSkill
- measure-rollbackSkill
- onpageSkill
- platformsSkill
- pseo-quality-gateSkill
- quick-winsSkill
- redirects-migrationSkill
- schemaSkill
- seo-planSkill
- seo-reportSkill
- setupSkill
- site-architectureSkill
- sitemapsSkill
- static-site-publishSkill
- sxoSkill
- tech-auditSkill
- titles-metaSkill
- topic-clustersSkill
- weekly-checkSkill
- wordpress-publishSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 9 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Check the page itself:
- Distinctive: line 31
Write the link into a sentence where it helps the reader, then use anchor text that:
- Distinctive: line 36
Add navigation links where structure calls for them: breadcrumbs, hub page lists, related-pages blocks written by hand or from data, not by …
- Distinctive: line 52
No hidden links, no links in footers stuffed with keyword lists, no auto-inserting links on every occurrence of a word.
- Distinctive: line 53
Do not add links to pages the user marked noindex or that redirect.
- Distinctive: line 54
Do not chain links back to back or put many links in one block.
- Distinctive: line 64
Do not state a target link count per page.
- Distinctive: line 65
Do not edit pages the user did not name.
- Very specific: line 66
Do not use nofollow on internal links to "sculpt" signals.
- Distinctive: line 67
Treat orphan results as sampling output until confirmed with a larger crawl or the user's own CMS data.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Internal links: crawlable, descriptive, in context
Google's documented position: every important page should be linked from at least one other page, links should be crawlable <a href> elements, and anchor text should be descriptive, reasonably concise and relevant. It publishes no ideal number of internal links per page. The skill finds pages that fail the first rule and fixes anchors, without inventing quotas.
Inputs
- The site URL (public, with an XML sitemap;
linkscompares the sitemap with what it crawls). - Optionally a query+page export (
gsc) to choose which pages deserve links first. - Pages the user owns and may edit.
Steps
- Find orphans and weak pages:
Output:npx sitetiller links https://example.com --pages 100 --jsonsitemapUrl,listed,crawled,orphansandweak, each row{url, linkedFrom, anchors}.linkedFromcounts crawled pages linking to it.weakmeans linked from 1 or 2 crawled pages. The crawl is a spread sample of the sitemap, so a page listed as orphan is "not linked from the sample". Raise--pagesand re-run before acting on important pages. The command fetches one page at a time with delays; do not run several at once. - Rank candidates. Use impressions from
gsc(strikingfor positions 4-20) or business value. A page with queries at positions 4-20 and no links is the first target. - Check the page itself:
Fields:npx sitetiller page https://example.com/guides/invoice-template --jsoninternalLinks,links[](href,internal,anchor). Look for empty anchors, generic anchors ("click here", "read more"), image links without alt, and links that are not<a href>(JavaScript-only,onclick,span). Google cannot reliably follow those. - For each target page, find 3-5 existing pages where a reader of that page would plausibly want the target. Pick pages on the same topic first (
topic-clusters), and pages that already have traffic. - Write the link into a sentence where it helps the reader, then use anchor text that:
- describes the target page and makes sense read alone (Google's own test),
- is reasonably concise, relevant to both pages, and varies naturally,
- is not a repeated exact-match keyword.
Example: instead of
click here, writesee the <a href="/guides/invoice-template">invoice template with payment terms</a>.
- Add navigation links where structure calls for them: breadcrumbs, hub page lists, related-pages blocks written by hand or from data, not by keyword string match.
- Re-run
linksafter the edits. Orphans should drop to zero for the pages touched. Track the effect withmeasure-rollback: pages that gained links against matched pages that did not, 28 days.
Anchor review table
| Pattern | Problem | Fix |
click here, read more, this | No context for reader or Google | Name the destination |
| Image link, empty alt | Empty link, no anchor text | Add descriptive alt text; Google uses it as anchor text |
| Long sentence as anchor | Hard to read, diluted | Cut to the descriptive core |
| Same exact-match anchor on dozens of pages | Looks forced | Vary by context; one clear anchor per sentence |
| Two links to the same page in one paragraph | Noise | Keep the more useful one |
| Link text unrelated to the target | Misleads readers | Make anchor and target agree |
| JavaScript-only navigation | May not be followed | Use <a href> with a real URL |
Without spam
- Link only where the destination helps the reader at that moment.
- No hidden links, no links in footers stuffed with keyword lists, no auto-inserting links on every occurrence of a word.
- Do not add links to pages the user marked noindex or that redirect.
- Do not chain links back to back or put many links in one block.
- Pages not worth linking (thin, duplicate, outdated) should be improved, merged or removed instead (
cannibalization,content-decay).
Output to the user
- Orphans and weak pages with
linkedFromand the crawl coverage (crawledoflisted). - For each target: the source pages, the sentence, the anchor and the HTML to add.
- Anchors to rewrite, with current and proposed text.
- Measurement plan and a reminder that the crawl is a sample.
Guardrails
- Do not state a target link count per page. Google gives none.
- Do not edit pages the user did not name. Provide the proposed text for them to apply.
- Do not use
nofollowon internal links to "sculpt" signals; use it only for untrusted external sources, withsponsoredfor paid links andugcfor user-submitted links, per Google. - Treat orphan results as sampling output until confirmed with a larger crawl or the user's own CMS data.
References
examples/links.json: real output of this skill's command on sitetiller.com (2026-11-13), seeexamples/README.md.references/sources.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

