Skills/Local SEOv2.3.0

Fix local SEO, NAP and service-area pages, with your agent

Wires specific LocalBusiness subtype JSON-LD, crawlable NAP (name, address, phone and hours) and genuine service and location pages without doorway spam, benchmarked against local rivals with clickd.

Add it, from the top of the site’s repositorynpx skills add subinternal/clickd --skill clickd-local-seo
Then ask your agentCheck our local SEO on example.com with clickd, wire specific LocalBusiness schema and crawlable NAP from one config, and benchmark local rivals.

For local service businesses, multi-location brands and the developers who build their sitesCheck a site’s locations

Four steps from location check to local verification

Your agent checks the towns and contact details clickd extracts, wires specific LocalBusiness schema and crawlable NAP from one config, and avoids doorway spam.

  1. 1Check current locations, NAP consistency and local rivalsclickd_check
  2. 2Put crawlable NAP and specific LocalBusiness schema in templates
  3. 3Build genuine location and service pages without doorway spam
  4. 4Check live with clickdclickd_check

Local signals unified in code

One source of truth in the repository for visible NAP, specific LocalBusiness subtype JSON-LD and service-area pages.

example.com local business read

Checked with clickd_check (kind: "locations") and clickd_rivals (view: "near").

Sample
  • Schema @typeGeneric Organization with no address, geo or openingHoursSpecific HVACBusiness subtype with PostalAddress, GeoCoordinates and hours
  • Crawlable NAP in HTMLPhone number only in header image; hours missing from footerPlain HTML <a href="tel:+1...">, street address and hours in footer and /contact
  • Service & town pages24 near-identical swap-the-city pages risking doorway demotionConsolidated thin town pages into 4 real branch pages + clear areaServed coverage
  • Local rival benchmarkRanked #6 of 9 local HVAC sites in market readPassed all local business and schema rules on rescan

How clickd checks local SEO

Extracts real towns, phone numbers, addresses and schema subtypes from the live HTML.

  • clickd_check (kind: "locations")Extracts the cities, states, phone numbers, addresses and LocalBusiness schema from the live site.
  • clickd_rivals (views: "near" & "market")Benchmarks the site against nearby businesses in the same line of work and state.
  • clickd_schema_create (kind: "LocalBusiness")Builds valid LocalBusiness subtype JSON-LD from the business’s verified contact config.

When to reach for it

Reach for it when

  • You run a local service business, clinic, firm, agency or multi-location brand.
  • Your site uses generic Organization schema instead of a specific LocalBusiness subtype with address, geo and hours.1,3
  • You want to cover surrounding towns and services without tripping Google’s doorway abuse policy.2

Leave it when

  • You want to auto-generate 50 identical city pages where only the town name changes.
  • The business has no local or regional footprint.

More things to ask your agent

Everyday prompts that load the Local SEO skill in Claude Code, Codex or Cursor.

  • Audit towns & NAPRun clickd_check (kind: "locations") on example.com and wire our name, address, phone, hours and LocalBusiness subtype from one config.
  • Replace doorway city pagesAudit our /locations/* pages for doorway spam risk and consolidate thin city swaps into genuine branch and service-area pages.
  • Benchmark local rivalsCompare example.com against nearby competitors with clickd_rivals (view: "near" and "market") and close the local schema gaps.

Local SEO skill vs the alternatives

Why pairing an open repository skill with a live crawler beats manual audits and prompt-only checklists.

  • How it reads your siteBy hand: Manual spot-checks in a browser · Prompt-only skill: Reads local source files only; misses live headers, redirects and JS shellsReads the live URL, HTTP headers, raw HTML and Search Console via clickd MCP
  • How changes are madeBy hand: Copy-pasting between docs, spreadsheets and editors · Prompt-only skill: Suggests generic copy in chat with no repo contextEdits your actual templates, routes and schema in the repository
  • How fixes are provedBy hand: Checking pages one by one after deploy · Prompt-only skill: Agent grades its own homework with no live checkRuns clickd_rescan and clickd_changes on the deployed site to prove rules passed

Skills to use alongside it

Included when you run npx skills add subinternal/clickd.

  • Schema markupGenerates, wires and validates JSON-LD structured data (Organization, LocalBusiness, Product, Service, Article, FAQPage and BreadcrumbList) from the visible facts on your pages, checked live with clickd.See skill
  • Page systemBuilds a site’s page templates and shared components so crawlers and assistants read every page well, and proves each pattern with clickd. About structure and spacing, not color, type or brand.See skill
  • AI visibilityAudits and fixes your site’s visibility in ChatGPT, Claude, Perplexity and Google AI Overviews: AI crawler access, non-JS HTML readability, answer-first passages, entity sameAs schema and live citation tracking.See skill

Questions about the Local SEO skill

Why shouldn’t we create a separate page for every town within 50 miles?
Swapping only the city name across dozens of near-identical pages violates Google’s doorway abuse policy. Build dedicated pages only for real branches or primary towns where you have distinct local work, codes or details, and list surrounding towns under areaServed.
Which schema @type should a local business use?
Use the most specific LocalBusiness subtype in schema.org (such as Dentist, Plumber, HVACBusiness, LegalService, Restaurant or AutoRepair) rather than generic Organization.

Install it by hand

The line at the top adds it for any agent. Or fetch its 1 files where your agent looks. Your agent also needs clickd connected over MCP: connecting an agent shows how.

Loads skills from .claude/skills/ in the repository, for everyone who works in it, or ~/.claude/skills/ for every project on your machine. Claude uses it when a request matches its description, or type /clickd-local-seo.

Terminal, for Claude Code
mkdir -p .claude/skills/clickd-local-seo
curl -fsSL https://clickd.com/skills/local-seo/SKILL.md -o .claude/skills/clickd-local-seo/SKILL.md
PowerShell, for Claude Code
New-Item -ItemType Directory -Force .claude\skills\clickd-local-seo | Out-Null
Invoke-WebRequest https://clickd.com/skills/local-seo/SKILL.md -OutFile .claude\skills\clickd-local-seo\SKILL.md -UseBasicParsing

Puts the files in .claude/skills/clickd-local-seo/.

Loads skills from .agents/skills/ in the repository and its parent folders, or ~/.agents/skills/ for every project. Codex uses it when a task matches its description, or mention it as $clickd-local-seo; /skills lists them.

Terminal, for Codex
mkdir -p .agents/skills/clickd-local-seo
curl -fsSL https://clickd.com/skills/local-seo/SKILL.md -o .agents/skills/clickd-local-seo/SKILL.md
PowerShell, for Codex
New-Item -ItemType Directory -Force .agents\skills\clickd-local-seo | Out-Null
Invoke-WebRequest https://clickd.com/skills/local-seo/SKILL.md -OutFile .agents\skills\clickd-local-seo\SKILL.md -UseBasicParsing

Puts the files in .agents/skills/clickd-local-seo/.

Loads skills from .cursor/skills/ or .agents/skills/ in the repository, or ~/.cursor/skills/ for every project. It also reads .claude/skills/, so one copy there serves both. The agent uses it when it is relevant, or type / in Agent chat and pick it.

Terminal, for Cursor
mkdir -p .cursor/skills/clickd-local-seo
curl -fsSL https://clickd.com/skills/local-seo/SKILL.md -o .cursor/skills/clickd-local-seo/SKILL.md
PowerShell, for Cursor
New-Item -ItemType Directory -Force .cursor\skills\clickd-local-seo | Out-Null
Invoke-WebRequest https://clickd.com/skills/local-seo/SKILL.md -OutFile .cursor\skills\clickd-local-seo\SKILL.md -UseBasicParsing

Puts the files in .cursor/skills/clickd-local-seo/.

An agent that does not load skills can still follow the file. Save the folder in the repository and point its standing instructions at it, with a line in AGENTS.md, which many agents read. The agent reads AGENTS.md when it starts, and follows the file when the task matches.

Terminal, for Any other agent
mkdir -p docs/clickd-local-seo
curl -fsSL https://clickd.com/skills/local-seo/SKILL.md -o docs/clickd-local-seo/SKILL.md
echo "For LocalBusiness schema, NAP and service-area pages, follow docs/clickd-local-seo/SKILL.md." >> AGENTS.md
PowerShell, for Any other agent
New-Item -ItemType Directory -Force docs\clickd-local-seo | Out-Null
Invoke-WebRequest https://clickd.com/skills/local-seo/SKILL.md -OutFile docs\clickd-local-seo\SKILL.md -UseBasicParsing
Add-Content AGENTS.md "For LocalBusiness schema, NAP and service-area pages, follow docs/clickd-local-seo/SKILL.md."

Puts the files in docs/clickd-local-seo/.

What is inside

SKILL.md stays short and sends your agent to a reference when a step needs it.

  • SKILL.mdThe four steps from checking detected locations and local rivals to wiring crawlable NAP and LocalBusiness subtype schema, building non-doorway service-area pages, and checking live.85 lines

Version 2.3.0, November 1, 2026ChangesSKILL.md in fullSourcesAs data, in skills.json

Sources

7 pages

Each is in a ## Sources list in the file that cites it, by the page’s own title.

Google Search Central

  1. 1Local Business Structured Data, Google Search Central. Required and recommended `LocalBusiness` properties including `address`, `telephone`, `geo` and `openingHoursSpecification`.
  2. 2Spam Policies for Google Web Search: Doorway Abuse, Google Search Central. Why multiple city or state pages with substantially similar content violate Google's doorway policy.

schema.org

  1. 3LocalBusiness Schema Vocabulary, schema.org. The official schema.org hierarchy of specific local business subtypes and `areaServed` definitions.

Agent skills format and clients

  1. 4Extend Claude with skills, Anthropic, Claude Code docs. Where Claude Code loads skills from, and how one is called.
  2. 5Build skills, OpenAI, ChatGPT Learn. Where Codex loads skills from, and how one is called.
  3. 6Agent Skills, Cursor docs. Where Cursor loads skills from, and how one is called.
  4. 7Specification, Agent Skills. The format every skill here keeps: the folder, the frontmatter and its limits.