Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when the user wants SEO growth, AI SEO, GEO/AEO, Google visibility, ChatGPT or Perplexity citations, schema, structured data, llms.txt, programmatic SEO, directory submissions, Product Hunt, G2/Capterra, backlinks, or a site audit. Trigger on 'SEO audit', 'AI search visibility', 'AI citations', 'schema markup', 'pSEO', 'submit to directories', or 'backlink plan'.
.claude/skills/minhnv0807-32-seo-growth-global/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 144% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 267% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 175% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 141% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 196% | 0% |
This skill covers 6 practical SEO layers: foundation audit, local SEO, search-intent content, AI search visibility, schema/machine-readable files, and backlink/distribution. The goal is qualified demand, not publishing volume.
Read .agents/product-marketing-context-global.md if available. Ask up to 4 questions: website URL, target market, main product/service, and 90-day SEO goal. Use Search Console, GA4, Ahrefs, Semrush or similar exports when available.
Two companion references:
references/seo-growth-playbook.md — 90-day roadmap, pSEO, comparison and alternative pages, site architecture.references/schema-json-ld.md — 12 copy-paste JSON-LD blocks with current rich-result status.| User says | Mode | |-----------|------| | "Traffic dropped", "site is not ranking" | SEO audit | | "We don't show up on Maps / in the local pack" | Local SEO | | "Get cited by ChatGPT/Perplexity" | AI SEO / GEO | | "Add schema", "rich results" | Schema | | "Create many SEO pages" | Programmatic SEO | | "Build alternative / vs pages" | Comparison pages | | "Submit to Product Hunt/G2/directories" | Directory + backlink |
Run in order — a failure at a lower layer nullifies everything above it.
| Check | Passing threshold | Tool | |-------|------------------|------| | robots.txt does not block money pages | 0 revenue pages disallowed | Search Console > robots.txt report | | XML sitemap exists, declared in robots.txt | Present, auto-updating | Search Console > Sitemaps | | Indexed pages / pages you want indexed | >90% | Search Console > Pages | | Redirect chains | 1 hop max, no loops | Screaming Frog, Ahrefs Site Audit | | Soft 404s | 0 | Search Console > Pages > "Soft 404" | | Canonicals point at the right page | 100% self-canonical or pointing at the true original | Any crawler | | Leftover noindex from staging | 0 pages | Grep noindex site-wide |
Two issues account for most "the site just won't rank" cases: site-wide canonicals pointing at the homepage (misconfigured theme or plugin) and a noindex left over from staging after go-live.
| Element | Threshold | Note | |---------|-----------|------| | Title | 50-60 characters | Longer gets truncated; primary term near the front | | Meta description | 150-160 characters | Not a ranking factor, but drives CTR | | H1 | Exactly one per page | Same topic as the title, not a copy of it | | H2/H3 | Phrased the way people type queries | This is the scaffolding AI engines extract passages from | | Images | Descriptive alt, meaningful filenames | WebP; no 4MB originals | | Internal links | Every page has at least one inbound link | See site architecture in the playbook |
| Metric | Good | Needs improvement | Poor | |--------|------|-------------------|------| | LCP (Largest Contentful Paint) | < 2.5s | 2.5-4.0s | > 4.0s | | INP (Interaction to Next Paint) | < 200ms | 200-500ms | > 500ms | | CLS (Cumulative Layout Shift) | < 0.1 | 0.1-0.25 | > 0.25 |
Read field data first (Search Console > Core Web Vitals, CrUX), lab data second (PageSpeed Insights). A 100 desktop score with a 5s mobile field LCP is common — mobile is what matters.
Usual LCP offenders: uncompressed hero images, auto-playing sliders above the fold, fonts loaded from multiple origins, and synchronous chat or popup scripts.
When two of your own pages compete for the same query, both underperform. How to detect it:
site:domain.com [keyword] — several near-identical pages means consolidate.Fix in this order: merge into the strongest page and 301 the rest → or split the search intent cleanly across pages → canonical only as a last resort.
Applies to any business with a physical location or a defined service area: clinics, restaurants, gyms, studios, home services, multi-location retail.
> First-time Google Business Profile setup: see 11-channel-setup-global. This section covers optimization once the profile exists.
NAP = Name, Address, Phone. These must be byte-identical everywhere:
| Where it appears | Check | |------------------|-------| | Google Business Profile | The source of truth — everything else copies from here | | Website footer | Character for character | | Contact / location pages | Character for character | | LocalBusiness schema | Character for character | | Social profiles | Character for character | | Citations and directories (Apple Business Connect, Bing Places, Yelp, industry directories) | Character for character |
"Suite 200" vs "Ste. 200" vs "#200" counts as three different addresses to an aggregator. Pick one string and enforce it.
| Item | Target | Cadence | |------|--------|---------| | Primary category | The most specific accurate category, never a generic one | Review quarterly | | Secondary categories | 2-5 genuinely relevant | Quarterly | | Photos | Exterior, interior, team, product | 3-5 per month | | Posts | Offers, events, updates | 2-4 per month | | Q&A | Seed and answer the questions customers actually ask | Monthly review | | Hours | Update holiday hours two weeks ahead | Per holiday calendar | | Services / menu | Complete, with prices | Quarterly |
One page per location, never all of them crammed onto the contact page:
/locations/[city] or /[service]-[city].LocalBusiness block per location (block 9 in references/schema-json-ld.md).| Funnel | Keyword type | Page type | |--------|--------------|-----------| | TOFU | problem, how-to, checklist | blog, guide, free tool | | MOFU | comparison, template, use case, "how much does X cost" | comparison, use-case page, pricing | | BOFU | alternatives, review, demo, pricing | landing page, pricing, case study |
Local businesses add a geographic layer: [service] [city], [service] near me, [service] [city] cost.
Drop the phrase "rank on ChatGPT" — nobody controls that. Report on four rungs instead, because each is earned differently:
| Rung | Meaning | What governs it | How you see it | |------|---------|-----------------|----------------| | 1. Retrieved | The model read your content while composing an answer | Crawlability, parseable structure, query relevance | Server logs; largely invisible | | 2. Cited | Your page appears as a source in the answer | Content structure, statistics, clarity, freshness | Prompt-tracking tools, AI Overview source lists | | 3. Mentioned | Your brand is named in the answer text | Entity recognition plus how the web describes you | Prompt-tracking tools | | 4. Recommended | Your product is on the shortlist the buyer considers | Aggregate web consensus — reviews, communities, analysts, press, video | The framing around the mention, not just its presence |
Rungs 1-3 are what on-site optimization earns you. Rung 4 mostly is not on your site at all. Reporting a single "AI visibility" number hides that gap. A rising citation count with a flat recommendation rate is a specific, diagnosable problem: the rest of the web does not corroborate you yet.
There is also a negative rung: recommended against. On requirements-heavy prompts, models increasingly name products a buyer should avoid, with sources. So track the sentiment around each mention (favorable / neutral / hedged / negative), not just the count.
Publishing your own "Top 10 category] tools" guide and ranking yourself first is the most widely recommended AEO tactic. It does not work the way it is sold.
The model treats your guide as a source about the category. It extracts the competitor names, evaluation criteria and pricing you compiled — then makes its recommendation from web-wide consensus, where established players dominate. The common outcome: your page earns the citation while the recommendation goes to a competitor. You did the research that helped the model describe them.
It splits by market position:
The test before funding another self-ranked listicle: if a model ignored everything on our domain, would the rest of the web still put us on the shortlist? If not, that gap is the priority.
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Bingbot
Allow: /
User-agent: CCBot
Disallow: /| Bot | Operator | Role | |-----|----------|------| | GPTBot | OpenAI | Broad crawling; blocking reduces how well the model knows you | | OAI-SearchBot | OpenAI | Powers search-time retrieval — blocking it all but eliminates citations | | ChatGPT-User | OpenAI | Fetches a page when a user asks ChatGPT to open a link | | PerplexityBot | Perplexity | Perplexity always cites sources, making it the most measurable channel | | ClaudeBot / anthropic-ai | Anthropic | anthropic-ai is the legacy token, ClaudeBot the current one | | Google-Extended | Google | Not a crawler. See the note below | | Bingbot | Microsoft | Feeds both Bing and Copilot | | CCBot | Common Crawl | Training-only corpus; produces no citations, safe to block if you prefer |
What most guides get wrong: Google-Extended does not control whether you appear in AI Overviews. AI Overviews are built on the regular Search index. Blocking Google-Extended only affects use of your content in Google's other generative products. To control snippet usage in AI Overviews you use nosnippet, max-snippet or data-nosnippet — which also costs you ordinary snippets.
Three additional checks:
llms.txt. Served at /llms.txt, listing your most important pages in markdown with short descriptions. It is a community-proposed convention with no formal commitment from any major platform. Cheap enough to ship, but do not oversell it or bill it as a major line item.Test 10-20 of your highest-value queries and log the results:
| Question | Platform (ChatGPT / Perplexity / AI Overview) | Are we cited? | Which competitor is cited instead | Action | |----------|----------------------------------------------|---------------|-----------------------------------|--------| | query 1] | | Yes / No | | | | query 2] | | Yes / No | | |
Query types to cover:
When a competitor is cited and you are not, check five things: is their content more extractable, do they cite statistics and sources, is it more recently updated, do they have schema you lack, and are they referenced by third parties (press, communities, review sites).
AI systems extract passages, not pages. Every block below must stand alone without the paragraph before it. Weave these into normal content — do not write a separate "AI version" of the page, which risks scaled-content policy problems.
| Block | Query it serves | Structure | |-------|-----------------|-----------| | Definition | "what is X" | Sentence 1 defines it. Sentences 2-3 expand. Final sentence says why it matters | | Step-by-step | "how to X" | One intro line plus a numbered list, one concrete action per step | | Comparison table | "X vs Y" | Criteria column, a "Best for" row, and a 1-2 sentence bottom line | | Pros and cons | "is X worth it" | Pros, cons, then a conditional verdict | | FAQ | related questions | Questions phrased as users ask them; 50-100 word answers | | Listicle | "best X" | Read section 4.2 before building these | | Statistic citation | evidence-seeking queries | Specific number, source, year, link | | Self-contained answer | all types | 40-80 words, no "it", "this", or "as mentioned above" | | Pricing | "how much does X cost" | Real range, the variables that move it, one worked example | | Who it is and is not for | evaluation queries | Explicitly name who should not buy — this is the differentiator | | Freshness and authorship | all types | Updated date plus a real author with stated expertise |
Four formatting rules: lead each section with the answer instead of burying it; write H2/H3 the way users phrase queries; use tables over prose for comparisons; use numbered lists over paragraphs for procedures.
| Page | Schema | |------|--------| | Company | Organization, WebSite | | Blog | Article / BlogPosting | | Product | Product + Offer (+ AggregateRating when real reviews are on the page) | | SaaS / app | SoftwareApplication | | FAQ | FAQPage — see caveat | | Ordered procedure | HowTo — see caveat | | Breadcrumb | BreadcrumbList | | Location page | LocalBusiness (use the specific subtype: Dentist, Restaurant, ProfessionalService...) | | Event, webinar | Event | | Course | Course |
Two things to state plainly to the client:
Full code for 12 JSON-LD blocks, testing tools and common failure modes: references/schema-json-ld.md.
Never conclude "this site has no schema" from a single fetch. Simple fetch tools do not execute JavaScript, and a large share of sites inject JSON-LD through GTM or client-side rendering. Verify with the Rich Results Test or DevTools before it goes into an audit — including when auditing competitors.
Prioritize sources that can also produce leads, not raw link counts:
Avoid: bulk link packages, PBNs, comment spam. Beyond the penalty risk, they generate none of the web consensus AI engines actually weigh.
markdown# SEO Growth Plan — [Brand] ## 1. Diagnosis | Area | Status | Evidence | Priority | ## 2. Technical baseline | Metric | Current | Threshold | Fix | Owner | ## 3. 90-day SEO strategy - Market: - ICP: - Main search intent: - Primary KPI: ## 4. Page roadmap | Page | Funnel | Keyword intent | CTA | Owner | ## 5. Local SEO (if applicable) | Item | Current | Action | Cadence | ## 6. AI SEO / GEO actions | Question | Platform | Cited? | Competitor cited | Action | Current ladder rung: [retrieved / cited / mentioned / recommended] Mention sentiment: [favorable / neutral / hedged / negative] ## 7. Schema + technical checklist | Page | Schema/file | Action | Validation | ## 8. Backlink/distribution plan | Destination | Asset needed | Submission copy | Deadline | ## 9. Measurement | Metric | Baseline | Target | Tool |
08-competitor-research-global: SEO competitors, content gaps, and the input data for comparison pages.11-channel-setup-global: first-time Google Business Profile setup.12-landing-page-brief-global: BOFU landing pages and comparison pages.13-data-analysis-global: GA4/Search Console/export analysis.15-social-listening-global: real community questions for FAQ and TOFU content.36-content-brief-global: turn the page roadmap into writing briefs.aggregateRating on pages without reviews.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 47,822 | 38,426 | -20% | 1 | 1 | 0% | 7,758 | 11,076 | +43% | 0 | 0 | — |
case-02 | fail→fail | 47,972 | 32,125 | -33% | 1 | 1 | 0% | 8,291 | 10,551 | +27% | 0 | 0 | — |
case-03 | fail→fail | 53,933 | 43,770 | -19% | 1 | 1 | 0% | 8,311 | 11,708 | +41% | 0 | 0 | — |
case-04 | pass→fail | 13,125 | 13,672 | +4% | 1 | 1 | 0% | 2,090 | 7,022 | +236% | 0 | 0 | — |
case-05 | pass→pass | 13,013 | 11,658 | -10% | 1 | 1 | 0% | 2,242 | 6,673 | +198% | 0 | 0 | — |
case-06 | pass→pass | 18,170 | 14,703 | -19% | 1 | 1 | 0% | 2,087 | 6,362 | +205% | 0 | 0 | — |
case-07 | fail→pass | 16,947 | 16,578 | -2% | 1 | 1 | 0% | 2,671 | 6,508 | +144% | 0 | 0 | — |
case-08 | pass→pass | 16,149 | 11,256 | -30% | 1 | 1 | 0% | 2,580 | 6,627 | +157% | 0 | 0 | — |
case-09 | fail→pass | 9,704 | 13,242 | +36% | 1 | 1 | 0% | 1,658 | 6,078 | +267% | 0 | 0 | — |
case-10 | pass→pass | 11,885 | 10,006 | -16% | 1 | 1 | 0% | 2,005 | 6,344 | +216% | 0 | 0 | — |
case-11 | pass→pass | 10,733 | 7,073 | -34% | 1 | 1 | 0% | 1,836 | 5,942 | +224% | 0 | 0 | — |
case-12 | pass→pass | 11,881 | 12,899 | +9% | 1 | 1 | 0% | 2,086 | 6,823 | +227% | 0 | 0 | — |
case-13 | fail→pass | 16,161 | 18,161 | +12% | 1 | 1 | 0% | 2,858 | 7,846 | +175% | 0 | 0 | — |
case-14 | pass→pass | 13,395 | 13,747 | +3% | 1 | 1 | 0% | 2,407 | 7,471 | +210% | 0 | 0 | — |
case-15 | fail→pass | 18,264 | 16,036 | -12% | 1 | 1 | 0% | 3,064 | 7,371 | +141% | 0 | 0 | — |
case-16 | pass→pass | 12,587 | 12,545 | -0% | 1 | 1 | 0% | 2,243 | 6,816 | +204% | 0 | 0 | — |
case-17 | pass→pass | 12,102 | 8,992 | -26% | 1 | 1 | 0% | 2,226 | 6,419 | +188% | 0 | 0 | — |
case-18 | pass→pass | 13,237 | 8,961 | -32% | 1 | 1 | 0% | 2,128 | 6,194 | +191% | 0 | 0 | — |
case-19 | fail→pass | 13,580 | 12,535 | -8% | 1 | 1 | 0% | 2,284 | 6,766 | +196% | 0 | 0 | — |
case-20 | fail→fail | 19,850 | 22,886 | +15% | 1 | 1 | 0% | 3,487 | 8,557 | +145% | 0 | 0 | — |
case-21 | fail→fail | 11,104 | 14,699 | +32% | 1 | 1 | 0% | 2,213 | 7,761 | +251% | 0 | 0 | — |
case-22 | fail→fail | 16,901 | 21,169 | +25% | 1 | 1 | 0% | 3,047 | 8,559 | +181% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.