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.
1Check current locations, NAP consistency and local rivalsclickd_check
2Put crawlable NAP and specific LocalBusiness schema in templates
3Build genuine location and service pages without doorway spam
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.
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.
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.
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
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
Each is in a ## Sources list in the file that cites it, by the page’s own title.
Google Search Central
1Local Business Structured Data, Google Search Central.Required and recommended `LocalBusiness` properties including `address`, `telephone`, `geo` and `openingHoursSpecification`.