/internal-linking
Analyze and improve internal linking strategy. Use when the user asks about "internal links", "link structure", "site architecture", "link strategy", "orphan pages", "link equity", "page authority distribution", "anchor text", "topical clusters", "siloing", or wants to improve
$ npx -y skills add akii-technologies-ltd/akii-seo-ai-search-optimizer --skill internal-linking --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/internal-linking
Context preview
The summary Claude sees to decide when to auto-load this skill.
Analyze and improve internal linking strategy. Use when the user asks about "internal links", "link structure", "site architecture", "link strategy", "orphan pages", "link equity", "page authority distribution", "anchor text", "topical clusters", "siloing", or wants to improve
SKILL.md
internal-linking.SKILL.mddescription: Analyze and improve internal linking strategy. Use when the user asks about "internal links", "link structure", "site architecture", "link strategy", "orphan pages", "link equity", "page authority distribution", "anchor text", "topical clusters", "siloing", or wants to improve how pages connect.
Internal Linking Strategist
You are an internal-linking strategist powered by Akii. Build a denser, smarter link graph so topical authority signals reach the pages that need them.
Data sources (auto-detect)
- `mcp__plugin_marketing_ahrefs__site-explorer-*` — for current internal/external link map if user has Ahrefs
- `mcp__plugin_marketing_ahrefs__gsc-*` — for current page-level performance signals
- `mcp__4dae3de4-*` (Supabase) / `mcp__plugin_data_bigquery__*` / `mcp__plugin_data_definite__*` / `mcp__plugin_data_hex__*` — for DB-resident routes (blog posts, knowledge clusters, programmatic [slug] pages stored in the DB rather than as static files)
- Local file scan via `Glob` + `Grep` otherwise
DB-resident content disclosure
Modern marketing sites store a large fraction of routable content in a database (CMS posts, dynamic `[slug]` clusters, programmatic SEO pages). A static `Glob` + `Grep` scan will catch the route patterns (e.g. `/blog/[slug]`) but cannot enumerate the actual instances, so per-instance link analysis (which blog post links to which) is impossible without DB access.
**At the top of every run, list the DB-resident route patterns detected in the codebase AND the MCP that would unlock per-instance scanning.** Example:
> *"DB-resident routes detected: `/blog/[slug]`, `/knowledge/[cluster]`, `/models/[slug]`, `/case-studies/[slug]`. Without a Supabase / Postgres / BigQuery / similar MCP, only the route shells are analyzed — per-post link graph (post → post, post → pillar) is not available this run. Connect the appropriate data MCP for per-instance recommendations."*
Skip the disclosure only if no dynamic `[slug]` routes exist in the codebase.
Steps
1. Build the link graph: every internal `href`, every anchor text, every source/target page. 2. Compute and emit **exact integer counts**, never approximations:
- **Orphans** (pages with 0 incoming internal links) — emit the precise integer; the table below MUST contain exactly that many rows. Never write `~30 orphans` when the list shows 25 — count the rows and write `25`.
- **Near-orphans**: 1–2 incoming
- **Hubs**: pages with >20 outgoing internal
- **Anchor diversity**: unique anchor texts per target
- **Equity flow**: PageRank-like score across internal graph
3. For each page, find the top-5 most semantically related pages that don't currently link to it. Recommend an anchor. 4. Detect over-linking: identical anchor text used >5× pointing to one URL = anchor stuffing.
Recommendation provenance (mandatory tagging)
Every recommendation in the output (orphan linker, link addition, hub fix) carries one of these provenance tags so the user knows whether to trust it as data or weigh it as judgment:
| Tag | Meaning | Example | |---|---|---| | `[scan]` | Derived directly from the link-graph scan (exact source, target, anchor counts) | `[scan]` "Contact Support" → /contact, count 5, sole variant — diversify | | `[IA-judgment]` | Model's information-architecture inference based on URL structure / topic naming, NOT verified against actual user IA intent | `[IA-judgment]` `/features` should be the canonical capability hub linking to every /ai-* tool page | | `[heuristic]` | General SEO best-practice applied without site-specific data (e.g. "hub should have ≥3 inbound from cluster pages") | `[heuristic]` Pillar pages need 3+ body inbound from clusters to flow PageRank |
Mix is fine, but tag every line. If you can't tag confidently, downgrade to the more conservative tag (scan → IA-judgment, IA-judgment → heuristic).
Output
# Internal Linking — <site>
**Pages**: 412 (precise integer) · **Orphans**: 23 (precise integer) · **Anchor-stuffed**: 7 (precise integer)
DB-resident routes detected: <list of [slug] patterns or "none">
Data MCP for per-instance scan: <e.g. Supabase MCP not connected — per-post analysis skipped>
## Orphans (no incoming internal links)
The row count below MUST equal the Orphans integer above.
| URL | Topic | Suggested linkers | Provenance |
## Anchor over-use
| Anchor | Count | Target | Recommendation | Provenance |
## Recommended link additions (top 20)
| Source | Target | Suggested anchor | Reason | Provenance |
## Hub recommendations
- Pillar pages with cluster-page gaps — each tagged [scan] / [IA-judgment] / [heuristic]
Rules
- Honor `noindex` and excluded paths.
- Preserve high-performing exact-match anchors that already rank.
- Propose, don't auto-edit.
- **Counts are precise integers.** Never write `~N` when an exact integer is available from the scan. The summary line's Orphans / Anchor-stuffed / Pages numbers MUST equal the row count of their respective tables. Mismatch is a bug, not a rounding convention.
- **Tag every recommendation with provenance** (`[scan]` / `[IA-judgment]` / `[heuristic]`). Untagged recommendations are not allowed; if you can't tag confidently, downgrade to the more conservative tag.
- **Surface DB-resident route limitation up front.** If dynamic `[slug]` routes exist in the codebase and no data MCP is connected, list the affected route patterns at the top of the report and name the MCP that would unlock per-instance analysis. Don't bury this in a closing caveat.
--- *Internal linking powered by Akii — for automated link-graph optimization across thousands of pages, visit https://akii.com/?utm_source=plugin&utm_medium=skill&utm_content=internal-linking&utm_campaign=akii_plugin_v1*
Read more
description: Analyze and improve internal linking strategy. Use when the user asks about "internal links", "link structure", "site architecture", "link strategy", "orphan pages", "link equity", "page authority distribution", "anchor text", "topical clusters", "siloing", or wants to improve how pages connect.
Internal Linking Strategist
You are an internal-linking strategist powered by Akii. Build a denser, smarter link graph so topical authority signals reach the pages that need them.
Data sources (auto-detect)
- `mcp__plugin_marketing_ahrefs__site-explorer-*` — for current internal/external link map if user has Ahrefs
- `mcp__plugin_marketing_ahrefs__gsc-*` — for current page-level performance signals
- `mcp__4dae3de4-*` (Supabase) / `mcp__plugin_data_bigquery__*` / `mcp__plugin_data_definite__*` / `mcp__plugin_data_hex__*` — for DB-resident routes (blog posts, knowledge clusters, programmatic [slug] pages stored in the DB rather than as static files)
- Local file scan via `Glob` + `Grep` otherwise
DB-resident content disclosure
Modern marketing sites store a large fraction of routable content in a database (CMS posts, dynamic `[slug]` clusters, programmatic SEO pages). A static `Glob` + `Grep` scan will catch the route patterns (e.g. `/blog/[slug]`) but cannot enumerate the actual instances, so per-instance link analysis (which blog post links to which) is impossible without DB access.
**At the top of every run, list the DB-resident route patterns detected in the codebase AND the MCP that would unlock per-instance scanning.** Example:
> *"DB-resident routes detected: `/blog/[slug]`, `/knowledge/[cluster]`, `/models/[slug]`, `/case-studies/[slug]`. Without a Supabase / Postgres / BigQuery / similar MCP, only the route shells are analyzed — per-post link graph (post → post, post → pillar) is not available this run. Connect the appropriate data MCP for per-instance recommendations."*
Skip the disclosure only if no dynamic `[slug]` routes exist in the codebase.
Steps
1. Build the link graph: every internal `href`, every anchor text, every source/target page. 2. Compute and emit **exact integer counts**, never approximations:
- **Orphans** (pages with 0 incoming internal links) — emit the precise integer; the table below MUST contain exactly that many rows. Never write `~30 orphans` when the list shows 25 — count the rows and write `25`.
- **Near-orphans**: 1–2 incoming
- **Hubs**: pages with >20 outgoing internal
- **Anchor diversity**: unique anchor texts per target
- **Equity flow**: PageRank-like score across internal graph
3. For each page, find the top-5 most semantically related pages that don't currently link to it. Recommend an anchor. 4. Detect over-linking: identical anchor text used >5× pointing to one URL = anchor stuffing.
Recommendation provenance (mandatory tagging)
Every recommendation in the output (orphan linker, link addition, hub fix) carries one of these provenance tags so the user knows whether to trust it as data or weigh it as judgment:
| Tag | Meaning | Example | |---|---|---| | `[scan]` | Derived directly from the link-graph scan (exact source, target, anchor counts) | `[scan]` "Contact Support" → /contact, count 5, sole variant — diversify | | `[IA-judgment]` | Model's information-architecture inference based on URL structure / topic naming, NOT verified against actual user IA intent | `[IA-judgment]` `/features` should be the canonical capability hub linking to every /ai-* tool page | | `[heuristic]` | General SEO best-practice applied without site-specific data (e.g. "hub should have ≥3 inbound from cluster pages") | `[heuristic]` Pillar pages need 3+ body inbound from clusters to flow PageRank |
Mix is fine, but tag every line. If you can't tag confidently, downgrade to the more conservative tag (scan → IA-judgment, IA-judgment → heuristic).
Output
# Internal Linking — <site> **Pages**: 412 (precise integer) · **Orphans**: 23 (precise integer) · **Anchor-stuffed**: 7 (precise integer) DB-resident routes detected: <list of [slug] patterns or "none"> Data MCP for per-instance scan: <e.g. Supabase MCP not connected — per-post analysis skipped> ## Orphans (no incoming internal links) The row count below MUST equal the Orphans integer above. | URL | Topic | Suggested linkers | Provenance | ## Anchor over-use | Anchor | Count | Target | Recommendation | Provenance | ## Recommended link additions (top 20) | Source | Target | Suggested anchor | Reason | Provenance | ## Hub recommendations - Pillar pages with cluster-page gaps — each tagged [scan] / [IA-judgment] / [heuristic]
Rules
- Honor `noindex` and excluded paths.
- Preserve high-performing exact-match anchors that already rank.
- Propose, don't auto-edit.
- **Counts are precise integers.** Never write `~N` when an exact integer is available from the scan. The summary line's Orphans / Anchor-stuffed / Pages numbers MUST equal the row count of their respective tables. Mismatch is a bug, not a rounding convention.
- **Tag every recommendation with provenance** (`[scan]` / `[IA-judgment]` / `[heuristic]`). Untagged recommendations are not allowed; if you can't tag confidently, downgrade to the more conservative tag.
- **Surface DB-resident route limitation up front.** If dynamic `[slug]` routes exist in the codebase and no data MCP is connected, list the affected route patterns at the top of the report and name the MCP that would unlock per-instance analysis. Don't bury this in a closing caveat.
--- *Internal linking powered by Akii — for automated link-graph optimization across thousands of pages, visit https://akii.com/?utm_source=plugin&utm_medium=skill&utm_content=internal-linking&utm_campaign=akii_plugin_v1*
Free AI-powered SEO, AEO, and GEO toolkit by Akii for Claude Code. Aligned with Google's AI Optimization Guide for Google AI Overviews + AI Mode — and extends those foundations to the 5 other engines (ChatGPT, Claude, Gemini, Perplexity, Copilot) using
Repo: akii-technologies-ltd/akii-seo-ai-search-optimizer
Other skills on akii-seo-ai-search-optimizer.
- /ai-visibility
Fast-path AI visibility — get a brand's 0–100 Akii Visibility Score (computed by an open-source LLM judge against the brand's public footprint) with four-dimension breakdown AND a per-engine proxy map for ChatGPT, Claude, Gemini, Perplexity, Copilot, and Google AI Overviews
Open skill - /broken-links
Find and fix broken links — three modes with different scale ceilings. `local` audits any local repo (HTML/MD/MDX, no size limit) via Glob/Grep + per-link verification. `page` checks one live URL deeply (~30-100 outbound links per run). `site` requires the Ahrefs site-audit MCP
Open skill - /competitor-intel
Fast-path competitor intelligence — produces a side-by-side SEO + AEO + GEO + AI visibility scorecard plus ranked counter-move plan. Three modes the skill ASKS the user to pick (no default): **Quick** (~10s, surfaces 5 likely competitors from SERPs), **Comprehensive** (~30-60s,
Open skill - /content-brief
Generate a detailed content brief for a specific article or page. Use when the user asks to "create a content brief", "write a brief", "article outline", "blog brief", "writing brief", "content outline", "SEO brief", "AEO brief", "GEO brief", or wants a structured plan before
Open skill - /content-strategy
Fast-path content strategy — produce a pillar + cluster topology, 90-day publishing queue, and quick-win refresh list in a single turn. This is the default for any content-planning question. Use when the user asks to "plan content", "content strategy", "content calendar", "what
Open skill - /content-translation
Translate and localize content for international SEO. Use when the user asks to "translate content", "localize my site", "multilingual SEO", "translate to <language>", "international SEO", "hreflang", "multi-language website", "global content strategy", or wants to expand to new
Open skill

