Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
},
"metadata": {
"description": "The official Google Ads + Meta Ads + SEO + GEO plugin from NotFair. SEO, GEO, Google Ads, and Meta Ads skills for Claude Code.",
"version": "0.25.6"
"version": "0.25.7"
},
"plugins": [
{
"name": "notfair",
"source": "./",
"description": "The official Google Ads + Meta Ads + SEO + GEO plugin from NotFair. SEO analysis, Google Ads management, Meta (Facebook + Instagram) Ads management, GSC-driven content planning + local calendar viewer, keyword research, content optimization, schema markup, meta tags optimization, broken link checker, single-page deep audit, and Generative Engine Optimization for AI search.",
"version": "0.25.6",
"version": "0.25.7",
"author": {
"name": "NotFair",
"url": "https://notfair.co"
Expand Down
12 changes: 11 additions & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "notfair",
"version": "0.25.6",
"version": "0.25.7",
"description": "The official Google Ads + Meta Ads + SEO + GEO plugin from NotFair. SEO analysis, Google Ads management, Meta (Facebook + Instagram) Ads management, keyword research, content optimization, schema markup tools, broken link checker, single-page deep audit, and Generative Engine Optimization (GEO) for AI search engines — powered by Google Search Console, Google Ads, and Meta Marketing APIs.",
"author": {
"name": "NotFair",
Expand All @@ -23,6 +23,16 @@
"./seo/seo-page",
"./seo/broken-link-checker",
"./seo/geo-optimizer",
"./seo/local-seo",
"./seo/hreflang-international",
"./seo/sitemap-audit",
"./seo/image-seo",
"./seo/ecommerce-seo",
"./seo/programmatic-seo",
"./seo/competitor-pages",
"./seo/sxo",
"./seo/seo-drift",
"./seo/backlink-audit",
"./notfair-upgrade-skill",
"./gemini"
]
Expand Down
10 changes: 10 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ Skills under `seo/`, `google-ads/`, `meta-ads/`, `gemini/`, and `notfair-upgrade
| JSON-LD / structured data (FAQ, Product, HowTo, etc.) | `schema-markup-generator` | `seo/schema-markup-generator/SKILL.md` |
| Broken-link / 404 / site-health crawl | `broken-link-checker` | `seo/broken-link-checker/SKILL.md` |
| Rank in ChatGPT / Perplexity / AI Overviews (GEO / AEO) | `geo-optimizer` | `seo/geo-optimizer/SKILL.md` |
| Local pack / Google Business Profile / Maps / NAP / "near me" | `local-seo` | `seo/local-seo/SKILL.md` |
| Hreflang, international / multilingual, multi-region targeting | `hreflang-international` | `seo/hreflang-international/SKILL.md` |
| XML sitemap audit, sitemap errors, crawl-coverage | `sitemap-audit` | `seo/sitemap-audit/SKILL.md` |
| Image SEO, alt text, Google Images, WebP, image schema | `image-seo` | `seo/image-seo/SKILL.md` |
| E-commerce SEO, product/category pages, faceted nav, product schema | `ecommerce-seo` | `seo/ecommerce-seo/SKILL.md` |
| Programmatic / templated pages at scale (pSEO) | `programmatic-seo` | `seo/programmatic-seo/SKILL.md` |
| Competitor page gap analysis, "why do they outrank me", SERP brief | `competitor-pages` | `seo/competitor-pages/SKILL.md` |
| Search Experience Optimization (SXO), CTR + on-page conversion | `sxo` | `seo/sxo/SKILL.md` |
| SEO drift / regression monitoring, baseline & compare over time | `seo-drift` | `seo/seo-drift/SKILL.md` |
| Backlink / off-page audit, anchor text, referring domains, disavow | `backlink-audit` | `seo/backlink-audit/SKILL.md` |
| Connect WordPress, Strapi, Contentful, or Ghost | `setup-cms` | `seo/setup-cms/SKILL.md` |

## Google Ads
Expand Down
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,46 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## [Unreleased]

---

## [0.25.7] — 2026-06-29

### Added — ten new SEO skills (local, international, technical, commerce, off-page)

Major expansion of the SEO suite. All native skills built to repo conventions
(frontmatter triggers, `seo/shared/preamble.md` integration):

- **`local-seo`** — Local pack / Google Business Profile audit: NAP consistency,
GBP completeness, review health, local & service-area pages, `LocalBusiness` schema.
- **`hreflang-international`** — Hreflang correctness (return tags, x-default,
codes, hreflang↔canonical conflicts) + international URL-structure strategy.
- **`sitemap-audit`** — XML sitemap discovery, structural limits, lastmod accuracy,
and a URL reality cross-check (non-200 / noindex / canonicalized-away listed).
- **`image-seo`** — Alt text, WebP/AVIF, compression, srcset, CLS width/height,
lazy-load (incl. lazy-loaded-LCP), image sitemaps, `ImageObject` schema.
- **`ecommerce-seo`** — PLP/PDP, faceted-navigation crawl-budget traps, variant
canonicals, out-of-stock handling, `Product`/`Offer`/`Review` schema.
- **`programmatic-seo`** — Templated pages at scale: demand validation, a
uniqueness/value gate, internal-link hubs, indexation mgmt, doorway-page guardrails.
- **`competitor-pages`** — Coverage matrix + intent/depth/schema/E-E-A-T comparison
vs. top-ranking URLs, producing a brief handable to `content-writer`.
- **`sxo`** — Search Experience Optimization: SERP click factors + post-click
experience/conversion (above-the-fold intent match, CWV, CTAs, anti-pogo-sticking).
- **`seo-drift`** — Baseline + compare to catch regressions (lost rankings,
deindexed pages, overwritten titles, flipped noindex/canonical).
- **`backlink-audit`** — Off-page audit from the free GSC Links report by default
(or a paid Ahrefs/Semrush/DataForSEO export); explicit about data limits.

All registered in `AGENTS.md`, `.claude-plugin/plugin.json`,
`.claude-plugin/marketplace.json`, and `README.md`.

Skills that would duplicate existing skills were intentionally not added (to avoid
skill-routing collisions); the pure paid-data MCP wiring was skipped in favor of
`backlink-audit` consuming such data when present.

---


---

## [0.25.6] — 2026-06-04
Expand Down
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,16 @@ Your data is preserved — the runtime state directory (`~/.toprank/`, holding p
| [`seo-page`](seo/seo-page/) | Single-page deep analysis. Focused audit of a specific URL for content quality, structure, and keyword optimization. |
| [`broken-link-checker`](seo/broken-link-checker/) | Scans websites to find and report broken internal and external links (404s/5xx). |
| [`geo-optimizer`](seo/geo-optimizer/) | Generative Engine Optimization (GEO) for AI search engines. Audits content with a 0–100 GEO Score, rewrites for AI citation, and produces per-engine strategy for ChatGPT, Claude, Perplexity, Gemini, and Google AI Overviews. |
| [`local-seo`](seo/local-seo/) | Local pack / Google Business Profile audit. NAP consistency, GBP completeness, review health, local & service-area pages, and LocalBusiness schema. |
| [`hreflang-international`](seo/hreflang-international/) | International / multilingual SEO. Validates hreflang (return tags, x-default, codes), catches hreflang↔canonical conflicts, and reviews URL-structure strategy. |
| [`sitemap-audit`](seo/sitemap-audit/) | XML sitemap audit. Discovery, structural limits, lastmod accuracy, and a URL reality cross-check (non-200 / noindex / canonicalized-away listed; indexable pages missing). |
| [`image-seo`](seo/image-seo/) | Image SEO audit. Alt text, file names, WebP/AVIF, compression, srcset, CLS width/height, lazy-load, image sitemaps, ImageObject schema. |
| [`ecommerce-seo`](seo/ecommerce-seo/) | E-commerce SEO. Category/product pages, faceted-navigation crawl traps, variant canonicals, out-of-stock handling, Product/Offer schema. |
| [`programmatic-seo`](seo/programmatic-seo/) | Programmatic / templated pages at scale. Demand validation, uniqueness/value gate, internal linking, indexation management, doorway-page guardrails. |
| [`competitor-pages`](seo/competitor-pages/) | Competitor page gap analysis. Coverage matrix, intent/depth/schema comparison vs. top-ranking URLs, and a brief to beat the SERP. |
| [`sxo`](seo/sxo/) | Search Experience Optimization. SERP click factors + post-click experience/conversion (intent match, CWV, CTAs, anti-pogo-stick). |
| [`seo-drift`](seo/seo-drift/) | SEO drift monitoring. Baseline + compare to catch regressions (lost rankings, deindexed pages, overwritten titles, flipped noindex/canonical). |
| [`backlink-audit`](seo/backlink-audit/) | Backlink / off-page audit. Works from the GSC Links report or a paid export; referring domains, anchor text, internal-linking wins, toxic-link verdict. |
| [`setup-cms`](seo/setup-cms/) | Connect WordPress, Strapi, Contentful, or Ghost for automated SEO field audits. |

### Cross-Model
Expand Down Expand Up @@ -230,6 +240,16 @@ notfair/
│ ├── seo-page/ <- single-page deep analysis
│ ├── broken-link-checker/ <- broken link scanner
│ ├── geo-optimizer/ <- GEO for AI search engines
│ ├── local-seo/ <- local pack / Google Business Profile audit
│ ├── hreflang-international/ <- hreflang / multilingual audit
│ ├── sitemap-audit/ <- XML sitemap audit
│ ├── image-seo/ <- image SEO audit
│ ├── ecommerce-seo/ <- e-commerce store SEO audit
│ ├── programmatic-seo/ <- programmatic / templated pages at scale
│ ├── competitor-pages/ <- competitor page gap analysis
│ ├── sxo/ <- search experience optimization
│ ├── seo-drift/ <- SEO regression monitoring
│ ├── backlink-audit/ <- backlink / off-page audit
│ └── setup-cms/ <- CMS connector
├── gemini/ <- cross-model review via Gemini CLI
├── notfair-upgrade-skill/ <- self-updater
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.25.6
0.25.7
82 changes: 82 additions & 0 deletions seo/backlink-audit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
name: backlink-audit
argument-hint: "<site URL — optionally attach a backlink export CSV from GSC/Ahrefs/Semrush>"
description: >
Backlink / off-page SEO audit. Works WITHOUT a paid tool by default — it uses the
Google Search Console Links report (your top linking sites, most-linked pages,
and anchor text) plus any backlink export the user provides (Ahrefs / Semrush /
Majestic / DataForSEO CSV). Analyzes referring-domain profile, anchor-text
distribution (over-optimized / spammy patterns), most-linked pages vs. money
pages (internal-linking opportunity), toxic/spam link signals, and link-building
priorities. Use this skill when the user asks about backlinks, link building,
off-page SEO, referring domains, anchor text, toxic/spam links, disavow, or their
link profile. Trigger on: "backlinks", "backlink audit", "link building", "off-
page SEO", "referring domains", "anchor text", "toxic links", "spam links",
"disavow file", "who links to me", "link profile", "domain authority". NOTE: rich
third-party metrics (DR/DA, full link index) require a paid data source; this
skill is explicit about what it can and can't see without one.
---

# Backlink / Off-Page SEO Audit

You are an off-page SEO strategist. Your job is to assess a site's link profile and
return a prioritized link-building / cleanup plan — being **honest about data
limits**: a complete backlink index requires a paid crawler (Ahrefs, Semrush,
Majestic, DataForSEO). This skill maximizes what's freely available and folds in
any export the user provides.

> Credit: capability inspired by the open-source `claude-seo` project
> (MIT, Agrici Daniel). Implementation is original to Toprank/NotFair.

---

## Step 0 — Determine data source

Ask / detect, in order of preference:
1. **A backlink export** (CSV) from Ahrefs / Semrush / Majestic / DataForSEO — best.
2. **Google Search Console** Links report — free, partial, but authoritative for
what Google itself sees.
3. Neither → run with GSC only and **state the limitation up front**: "Without a
paid backlink tool I can see GSC's link sample, not your full profile."

Do not fabricate DR/DA or link counts you can't measure. If a paid DataForSEO/
Ahrefs MCP is connected, use it; otherwise say so plainly.

## Phase 0 — Preflight & data

Read and follow `../shared/preamble.md`. Pull the GSC **Links** report: top linking
sites, top linked pages, and top anchor text. If the user attached an export, parse
it and prefer it for breadth.

## Phase 1 — Referring-domain profile

- Number and quality spread of referring domains (from available data).
- Relevance — are linking sites topically related to the business?
- Concentration — too many links from one domain, or a healthy spread?

## Phase 2 — Anchor text

- Distribution: branded vs. exact-match vs. generic vs. URL.
- **Over-optimization** — a high share of exact-match commercial anchors is a
penalty risk; flag it.
- Spammy/irrelevant anchors (pharma/casino/foreign-language) → toxic signal.

## Phase 3 — Most-linked pages vs. money pages

- Which pages attract the most links? Are they your conversion pages?
- **Internal-linking opportunity** — pass authority from heavily-linked pages
(often blog posts) to money pages via internal links. Often the highest-ROI,
fully-in-your-control move — call it out.

## Phase 4 — Toxic links & cleanup

- Identify clearly spammy referring domains from the data available.
- Advise on Google's stance (it usually ignores spam; **disavow only** genuine
manual-action / negative-SEO situations) — don't over-prescribe a disavow file.

## Phase 5 — Report

Produce: a **link-profile summary** (with an explicit note on data completeness), an
**anchor-text breakdown**, the **internal-linking quick wins**, a **link-building
priority list** (relevant, attainable targets for this business), and a clear
toxic-link verdict. Write in the user's language.
73 changes: 73 additions & 0 deletions seo/competitor-pages/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
name: competitor-pages
argument-hint: "<your page URL + 1-3 competitor URLs ranking for the same query>"
description: >
Competitor page gap analysis — take a query you want to win and the pages
currently outranking you, and produce a concrete brief on what to add or change
to compete. Compares content depth and coverage (subtopics they cover that you
don't), structure (headings, format, tables, media), search-intent match, E-E-A-T
signals, schema/rich-result eligibility, internal linking, and on-page
optimization — across your page vs. the top-ranking competitors. Use this skill
whenever the user wants to know why a competitor outranks them on a specific
query, what a top-ranking page does better, a content-gap analysis against
specific competitor URLs, or a brief to beat a specific SERP. Trigger on:
"why does competitor X outrank me", "content gap analysis", "competitor page
analysis", "what does the top result have that I don't", "how do I beat this
page", "analyze competitor pages", "SERP gap", "compete for [keyword]". For seed
keyword discovery use /keyword-research; for a content calendar use
/content-planner.
---

# Competitor Page Gap Analysis

You are a senior SEO content strategist. Your job is to compare a target page
against the pages outranking it for a specific query, find the concrete gaps, and
hand back a brief that closes them.

> Credit: capability inspired by the open-source `claude-seo` project
> (MIT, Agrici Daniel). Implementation is original to Toprank/NotFair.

---

## Step 0 — Scope

Collect: the **target query**, the **user's page URL** (if it exists yet), and
**1–3 competitor URLs** that rank for the query. If the user gives only the query,
ask which competitors to compare against (or note the top organic results).

## Phase 0 — Preflight & data

Read and follow `../shared/preamble.md`. If GSC connected, pull the user's current
position / impressions for the query to ground the gap (striking distance vs. far
behind).

## Phase 1 — Crawl all pages

Fetch the user's page and each competitor page. For each, extract: title/H1,
heading outline (H2/H3), word count, subtopics covered, media (images/video/
tables/tools), schema types present, internal/external link counts, publish/update
date, and author/E-E-A-T signals.

## Phase 2 — Intent & coverage comparison

- **Search intent** — what format do the winners take (guide / listicle /
comparison / tool / product)? Does the user's page match? Intent mismatch is
often the whole story.
- **Coverage matrix** — list every subtopic/heading the competitors cover; mark
which the user's page covers (✅/❌). The ❌ rows are the content gaps.
- **Depth & format** — word count, tables, examples, original data, media richness.
- **Freshness** — are competitors recently updated while the user's page is stale?

## Phase 3 — Signals comparison

- **E-E-A-T** — author bios, citations, first-hand experience, credentials.
- **Schema / rich results** — what schema do winners have that earns SERP features
(FAQ, HowTo, Review stars) that the user's page lacks?
- **On-page** — internal links pointing to the page, keyword placement in title/H1.

## Phase 4 — Brief

Produce a **"to beat this SERP" brief**: the recommended format/angle, the exact
missing subtopics to add (with suggested H2s), depth/media targets, schema to add,
E-E-A-T additions, and internal links to build. Make it directly handable to
`/content-writer`. Write in the user's language.
Loading