{"id":"f9b9e2be-75d3-47cd-956e-dfa240654ada","shortId":"X2znMq","kind":"skill","title":"seo-local","tagline":"Local SEO audit for brick-and-mortar, service-area, and multi-location businesses. Covers Google Business Profile signals on the website, NAP consistency across page and schema, local-pack rank tracking, citation samples on Tier-1 directories, and reviews on Google / Yelp / Trust","description":"# Local SEO\n\nScore a local business's website against the signals that drive local-pack and \"near me\" visibility — GBP integration on the page, NAP consistency, on-page local intent, citation footprint on Tier-1 directories, review-platform presence, and local-pack rank for the business's primary keywords. Deliverable is one prioritised fix list, anchored in observable signals.\n\n> Adapted from [`AgriciDaniel/claude-seo`](https://github.com/AgriciDaniel/claude-seo)'s `seo-local` skill (MIT). Concept and dimension structure mirror the upstream; backend rewired to SE Ranking + Firecrawl + Google APIs. DataForSEO Maps geo-grid and Business Listings checks from the upstream are dropped (no equivalent backend) — see \"Limitations\" in the deliverable.\n\n## Prerequisites\n\n- SE Ranking MCP server connected (used for local-pack rank, on-page audit data, domain context).\n- Claude's `WebFetch` tool available (used for sense-check fallback when Firecrawl is unavailable).\n- User provides: (a) a target domain or homepage URL, (b) at least one primary local keyword (e.g. `\"dentist Brooklyn\"`, `\"plumber near me\"`), (c) target country and ideally city/region for local-pack scoping. Optional: GBP listing URL, Yelp/Trustpilot URLs for review scraping.\n\n## Process\n\n1. **Validate target & preflight.** See `skills/seo-firecrawl/references/preflight.md` for the canonical 3-stage preflight (credit balance, Firecrawl availability, Google APIs). Skill-specific notes:\n   - Normalise the target (strip protocol from domain; confirm homepage is fetchable). Confirm at least one local keyword was provided — if none, infer from `<title>` + `<h1>` of the homepage; if still ambiguous, ask the user before continuing.\n   - Estimated SE Ranking cost for this skill: ~15–25 credits (1 audit re-check + 3–5 SERP queries + 1 domain overview).\n   - Firecrawl: optional with WebFetch fallback, ~6–9 Firecrawl credits if available (hard cap 12). When available, steps 4 (GBP-on-page audit), 5 (NAP extraction), and 7 (review scraping) run on the homepage + 5 sample pages + provided review URLs. Without Firecrawl those steps degrade to WebFetch-only — schema/JSON-LD detection and `tel:` / address element extraction become best-effort prose inspection. Pass `--no-firecrawl` to force WebFetch-only.\n   - Google APIs: tier 1 (GSC) unlocks step 8b (GSC local query performance) after the local-pack rank step; tier 2 (GA4) additionally unlocks step 8c (GA4 organic-by-landing-page enrichment). See `skills/seo-google/references/cross-skill-integration.md` for the full enrichment contract.\n\n2. **Business-type detection**\n   - Read homepage + `/contact` + footer prose (WebFetch markdown is enough for this).\n   - Classify as one of:\n     - **Brick-and-Mortar** — visible street address, \"Visit us at\", embedded Maps iframe.\n     - **Service Area Business (SAB)** — no street address, \"serving {region}\", \"we come to you\", `areaServed` in schema without `address.streetAddress`.\n     - **Hybrid** — both signals present (e.g. showroom + service area).\n   - This determines which checks apply downstream. SAB skips embedded-map and physical-address consistency. Record in `LOCAL-SEO-REPORT.md` \"Snapshot\".\n\n3. **Industry-vertical detection**\n   - From URL patterns (`/menu`, `/practice-areas`, `/listings`, `/inventory`), `<title>`, page prose, infer one of: Restaurant / Healthcare / Legal / Home Services / Real Estate / Automotive / Generic.\n   - This routes citation-source recommendations and schema-subtype recommendations later — load `references/local-citation-sources.md` for the vertical's Tier-1 directories.\n\n4. **GBP signals on the page** `mcp__firecrawl-mcp__firecrawl_scrape` (with `formats: [\"rawHtml\"]`)\n   - Scrape homepage + `/contact` (or whichever page has the most local intent).\n   - From `rawHtml` extract:\n     - Embedded Google Maps iframe (`<iframe src=\"https://www.google.com/maps/embed?...\">`) — record place ID if present.\n     - Reviews widget / GBP rich snippet markup.\n     - `aggregateRating` JSON-LD block (presence is the strongest signal that the site wants stars in SERPs).\n     - Business hours visibility on page (open-at-search-time correlates with rank — Whitespark's #5 factor).\n     - Click-to-call: count of `<a href=\"tel:...\">` elements.\n     - GBP profile link: any `<a href>` to `https://g.page/...` or `https://maps.app.goo.gl/...` or `https://www.google.com/maps/place/...`.\n   - **If Firecrawl unavailable:** WebFetch markdown can detect a `tel:` link in some renderings but loses iframes and JSON-LD. Mark Maps embed / aggregateRating / GBP profile-link detection as `(skipped — Firecrawl required)`.\n\n5. **NAP consistency** `mcp__firecrawl-mcp__firecrawl_scrape` on homepage + 5 sample pages\n   - Sample pages: homepage, `/contact`, `/about`, plus 2 service or location pages (pick from sitemap or top traffic pages).\n   - For each, extract:\n     - **Visible NAP from rendered prose.** Address pattern (street + city + region + postal), phone (`tel:` href + display format), business name (logo alt, footer, schema `name`).\n     - **NAP from JSON-LD.** Parse every `<script type=\"application/ld+json\">` block. Pull `name`, `address.streetAddress`, `address.addressLocality`, `address.addressRegion`, `address.postalCode`, `telephone`.\n   - **Compare across the 6 page samples + schema.** Any divergence (different phone format on the contact page vs homepage; \"Suite 200\" missing from one footer; schema phone in international format while page shows local format) → record in `nap-inconsistencies.csv`.\n   - **Brick-and-mortar only:** if a Maps iframe is present, attempt to read the embedded address from the iframe URL (the place ID and address are URL-encoded). Compare to page/schema NAP. SAB skips this.\n   - If `nap-inconsistencies.csv` is empty after the scan, write `nap-inconsistencies.csv` as a one-line file with header only and note \"NAP consistent across {n} pages and schema\" in `LOCAL-SEO-REPORT.md`.\n\n6. **Local-pack rank tracking** `DATA_getSerpResults` with country/region filters\n   - For each user-provided local keyword (or the 1–3 inferred from homepage):\n     - Call `DATA_getSerpResults` with the user's country and the most specific region/city the API supports (use `DATA_getSerpLocations` first to confirm a valid location code if the user supplied a city).\n     - Capture: top 10 organic, local-pack presence (yes/no), the 3 businesses in the local pack if shown (name, rating, review count), AIO presence.\n     - Cross-check: is the target domain in the top 10 organic? Is the target business name in the local pack?\n   - **Save the parsed result per keyword to `local-keywords.csv`** (columns: `keyword,country,location,local_pack_present,target_in_pack,target_pack_position,target_organic_position,top_pack_competitor_1,top_pack_competitor_2,top_pack_competitor_3`).\n   - Note the local-pack-ads caveat: the SE Ranking SERP returns the AI/ads-modified pack as Google serves it. If the local pack shows ads, record that — local-pack ad density jumped from 1% to 22% of mobile US local searches in 2025–2026 per Sterling Sky.\n\n7. **Reviews scraping** `mcp__firecrawl-mcp__firecrawl_scrape` on user-provided review URLs\n   - **Inputs (user-provided, optional).** GBP listing URL (`https://www.google.com/maps/place/...`), Yelp business URL, Trustpilot business URL, BBB profile URL.\n   - **For each provided URL:** scrape with `formats: [\"rawHtml\"]`. From the parsed DOM, extract: total review count, average rating, date of most recent review (review velocity proxy), count of owner responses on the most recent 10 reviews.\n   - **Aggregate signals:**\n     - Velocity: ≥1 new review in last 18 days = healthy (Sterling Sky 18-day rule). >21 days since last = \"review cliff\" risk.\n     - Volume: <10 Google reviews flags below the magic threshold.\n     - Star rating: 4.5+ matches consumer filtering thresholds (BrightLocal: 31% only consider 4.5+).\n     - Owner-response rate on Google: <50% on recent 10 = engagement gap.\n   - **If user provides no review URLs:** skip step 7 entirely. Note in `LOCAL-SEO-REPORT.md`: \"Review platforms: not provided. To audit review health, re-run with `--reviews 'gbp_url,yelp_url,trustpilot_url'`.\" Don't try to discover them — review-URL discovery is a different problem (and the Maps API path is the one we don't have).\n\n8. **On-page local-SEO audit** `DATA_getAuditReport` (existing audit) + `DATA_getIssuesByUrl` on the homepage\n   - **Reuse the existing site audit if one is recent (<30 days, see `seo-technical-audit`).** Don't create a new audit just for local — the audit data already covers title-tag issues, missing schema, mobile usability, etc.\n   - From the audit, surface the issues that bear on local SEO specifically:\n     - Title / H1 missing primary city or service term.\n     - Missing or invalid `LocalBusiness` JSON-LD.\n     - Mobile usability issues (mobile = where \"near me\" happens).\n     - Schema validation errors (broken `aggregateRating`, malformed `address`).\n   - **Defer schema fixes to `seo-schema`.** This skill does NOT generate JSON-LD. If LocalBusiness schema is missing or broken, the deliverable says \"Run `seo-schema` for paste-ready LocalBusiness markup with the correct industry subtype\" — that's `seo-schema`'s job and reimplementing it here would duplicate work.\n\n8b. **GSC local query performance** *(only if google-api.json is present, tier ≥ 1)*\n   - Pull GSC search analytics for the target property, last 28 days, dimension=query, filtered to local-intent patterns:\n     `python3 scripts/gsc_query.py --property \"{config.default_property}\" --days 28 --json`\n   - Client-side filter the queries for: contains `near me`, contains a city/region known for the business, or ends in a place-name. Surface top 10 by impressions.\n   - If a city-bearing query has impressions >100 and average position >10, that's a local-pack reach gap — flag in `LOCAL-SEO-REPORT.md` \"Top fixes\" with the GSC numbers as supporting evidence.\n   - If property not verified for this account: surface \"GSC: {target_domain} not verified — add it in Search Console\" and continue.\n   - See `skills/seo-google/references/cross-skill-integration.md` for failure modes.\n\n8c. **GA4 organic by landing page** *(only if google-api.json is present, tier ≥ 2)*\n   - Pull GA4 top organic landing pages, last 28 days:\n     `python3 scripts/ga4_report.py --report top-pages --days 28 --json`\n   - For multi-location sites, surface per-location-page sessions. If one location page captures 80%+ of organic traffic while peer location pages capture <5%, that's location-page quality variance worth flagging (probable doorway-page or thin-content risk on the underperformers).\n   - Single-location sites: just record the homepage's organic sessions as one row in the snapshot.\n\n9. **Citation-presence sample (best-effort)** `WebSearch` (no API key cost)\n   - For each Tier-1 directory in the vertical's list (load `references/local-citation-sources.md`), check whether the business has a listing using `site:{directory} \"{business_name}\"` queries via WebSearch.\n   - **Cap at 8 directories** (Google, Yelp, Facebook, BBB, Apple Maps, Bing Places, plus 2 vertical-specific). Anything beyond is diminishing returns and the user can run their own audit.\n   - Record in `LOCAL-SEO-REPORT.md` \"Citations\" section: detected / not detected per directory, plus the URL of the listing if found.\n   - **Caveat to surface:** WebSearch hits are a *sample*, not a comprehensive audit. A \"not detected\" doesn't prove absence — it proves the listing didn't surface for that specific query. Recommend a paid citation-audit tool (Whitespark, BrightLocal, Yext) for definitive coverage.\n\n10. **Synthesise** `LOCAL-SEO-REPORT.md`\n   - Score the 5 local dimensions on the rubric below, list top fixes (Critical / High / Medium / Low), record limitations.\n   - Apply the verdict heuristic — see Tips.\n\n## Output format\n\nCreate a folder `seo-local-{domain-slug}-{YYYYMMDD}/` with:\n\n```\nseo-local-{domain-slug}-{YYYYMMDD}/\n├── LOCAL-SEO-REPORT.md         (PRIMARY: verdict, scores, top fixes, limitations)\n├── local-keywords.csv          (load-bearing: per-keyword local-pack + organic positions)\n├── nap-inconsistencies.csv     (load-bearing: only emitted if discrepancies found)\n└── evidence/\n    ├── 01-homepage-snapshot.md     (Firecrawl raw HTML extracts: NAP, schema, GBP signals)\n    ├── 02-nap-page-samples.md      (per-page NAP extracts across 5 sample URLs)\n    ├── 03-serp-context.md          (raw DATA_getSerpResults per keyword)\n    ├── 04-reviews.md               (per-platform review-page snapshots, only if user provided URLs)\n    └── 05-citation-sample.md       (raw WebSearch results per directory check)\n```\n\n`LOCAL-SEO-REPORT.md` follows this shape:\n\n```markdown\n# Local SEO Report: {domain}\n\n> Snapshot dated {YYYY-MM-DD} · Country: {country} · Region: {region} · Primary keyword: \"{keyword}\"\n\n## Snapshot\n- Business type: {Brick-and-Mortar | SAB | Hybrid}\n- Industry vertical: {Restaurant | Healthcare | Legal | Home Services | Real Estate | Automotive | Generic}\n- Pages sampled for NAP: {n}\n- Local keywords tracked: {n}\n- Local pack present on {n}/{m} keywords; target in pack on {p}/{m}\n- Review platforms audited: {Google, Yelp, ... | not provided}\n- GSC last 28d local-intent queries: {n} queries / {clicks} clicks / {impressions} impressions  *(or `not configured`)*\n\n## Verdict: {STRONG | NEEDS WORK | WEAK}\n\n{One-sentence summary anchored in dimension scores below}\n\n## Dimension scores (0–10)\n\n| Dimension | Score | Top finding |\n|---|---|---|\n| GBP integration on page | {n}/10 | {one-line} |\n| NAP consistency | {n}/10 | {one-line} |\n| Local on-page (title/H1/contact/service pages) | {n}/10 | {one-line} |\n| Local-pack rank | {n}/10 | {one-line} |\n| Reviews & citations | {n}/10 | {one-line} |\n| **Composite** | {n}/10 | — |\n\n## Top fixes\n\n### Critical\n1. {Specific fix anchored in a finding above. Example: \"NAP discrepancy: footer shows '(212) 555-1234' but JSON-LD shows '+1-212-555-9999'. Pick one canonical phone, fix the wrong one.\" Cite the page/schema source.}\n\n### High\n- {fix}\n\n### Medium\n- {fix}\n\n### Low\n- {fix}\n\n## Local-pack rank summary\n- \"{keyword 1}\": local pack {present/absent}, target {in pack at #n / not in pack}, organic position {n}.\n- \"{keyword 2}\": …\n- (Full data: `local-keywords.csv`)\n\n## Reviews health (if audited)\n- Google: {n} reviews, {rating} avg, last review {n} days ago, owner response rate {p}%.\n- Yelp: …\n- Trustpilot: …\n\n## Citation sample\n- Google Business: {detected / not detected via site:google.com \"...\" search}\n- Yelp: …\n- Facebook: …\n- BBB: …\n- Apple Business Connect: …\n- Bing Places: …\n- {vertical-specific 1}: …\n- {vertical-specific 2}: …\n\n(Caveat: this is a sample, not a comprehensive citation audit. For definitive coverage, use Whitespark / BrightLocal / Yext.)\n\n## Schema status\n- LocalBusiness JSON-LD: {present and valid / present but missing recommended properties / invalid / absent}\n- Recommended next step: run `seo-schema {homepage_url}` for paste-ready LocalBusiness markup with the correct industry subtype.\n\n## Limitations\nThis skill could NOT assess:\n- **Geo-grid local-pack rank by lat/long.** Requires a Maps API (e.g. DataForSEO Maps geo-grid endpoint) we don't have. Workaround: pay for Local Falcon, GMB Crush, or BrightLocal Local Search Grid.\n- **Comprehensive citation audit.** WebSearch sampling covers ~8 directories; full audits cover 50+. Use Whitespark, BrightLocal, or Yext.\n- **GBP Insights data.** Requires GBP API access scoped to the listing owner. Ask the listing owner to export Insights and share.\n- **Real-time local-pack rank tracking over time.** This skill is a snapshot. Use SE Ranking's project-level rank tracker (`PROJECT_runPositionCheck`) or pair with `seo-drift` for diff snapshots.\n- **DataForSEO Business Listings.** Not in our backend; if the user needs it, they'd need to subscribe to DataForSEO directly.\n```\n\n`local-keywords.csv` columns: `keyword,country,location,local_pack_present,target_in_pack,target_pack_position,target_organic_position,top_pack_competitor_1,top_pack_competitor_2,top_pack_competitor_3,aio_present`\n\n`nap-inconsistencies.csv` columns: `source,name,address,phone,page_or_schema_path,canonical_value,divergence_note`\n\n## Tips\n\n- Respect SE Ranking Data API rate limit: 10 requests per second. Pace the per-keyword `DATA_getSerpResults` calls sequentially.\n- Call `DATA_getCreditBalance` before running. ~15–25 SE Ranking credits typical, plus 6–12 Firecrawl credits when Firecrawl is installed.\n- Verdict heuristic:\n  - **STRONG**: composite ≥7/10, NAP consistent across all sampled pages, target in local pack on majority of keywords, valid LocalBusiness schema with industry-correct subtype, ≥10 Google reviews with healthy velocity.\n  - **NEEDS WORK**: composite 4–6.9/10, OR 1+ NAP discrepancy, OR target out of local pack on majority of keywords. The \"Top fixes\" section is the deliverable here — most local-SEO audits land in this bucket.\n  - **WEAK**: composite <4/10, OR no LocalBusiness schema and no NAP visible on page, OR target absent from local pack on every tracked keyword. Substantial work required across multiple dimensions.\n- Don't generate LocalBusiness schema in this skill. **Always** defer to `seo-schema` for that — it has the rich-results validation and industry-subtype routing this skill doesn't replicate.\n- Don't generate review URLs from search results. If the user didn't provide a Yelp/Trustpilot/BBB URL, skip review scraping and tell the user to provide URLs in a re-run. Discovering review URLs from a domain is unreliable.\n- For multi-location sites with >5 locations, audit one location page per region rather than one per location — the local audit pattern repeats per location, so a sample establishes the baseline. If location-page quality variance is the suspected issue, pair with `seo-content-audit` on a sample of location pages.\n- AI-search local context (ChatGPT, Perplexity, AI Overviews) is **not** this skill's job — pair with `seo-geo` (URL-level GEO) or `seo-ai-search-share-of-voice` (domain-level brand visibility) for AI-search local visibility.\n- The 18-day review velocity rule (Sterling Sky) is the most actionable single number from review-platform analysis. If the most recent review is >21 days old, that's a leading indicator of upcoming local-pack rank drop — flag as Critical regardless of star rating.\n- Citation directories per vertical: load `references/local-citation-sources.md`. The list is curated to the directories that move the needle (Tier 1 + vertical-specific), not the long tail.\n- Pair with `seo-technical-audit` if site-wide technical-SEO issues surface in step 8 — this skill scopes to local-relevant findings, not the full audit.","tags":["seo","local","skills","seranking","agent-skills","ai-search","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills"],"capabilities":["skill","source-seranking","skill-seo-local","topic-agent-skills","topic-ai-search","topic-anthropic","topic-backlinks","topic-claude","topic-claude-code","topic-claude-plugin","topic-claude-skills","topic-content-brief","topic-ga4","topic-keyword-research","topic-mcp"],"categories":["seo-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/seranking/seo-skills/seo-local","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add seranking/seo-skills","source_repo":"https://github.com/seranking/seo-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (18,754 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:36.721Z","embedding":null,"createdAt":"2026-05-18T13:14:10.486Z","updatedAt":"2026-05-18T19:08:36.721Z","lastSeenAt":"2026-05-18T19:08:36.721Z","tsv":"'-1':43,87,552 '/...':646,650 '/about':706 '/agricidaniel/claude-seo)''s':119 '/contact':435,571,705 '/inventory':518 '/listings':517 '/maps/place/...':654 '/menu':515 '/practice-areas':516 '1':239,305,314,391 '12':330 '15':302 '2':408,428,708 '25':303 '3':248,310,507 '4':334,554 '5':311,340,351,630,688,699 '6':322 '7':344 '8b':395 '8c':413 '9':323 'across':30 'adapt':114 'addit':410 'address':370,454,467,501,728 'address.streetaddress':478 'aggregater':598,678 'agricidaniel/claude-seo':116 'alt':742 'ambigu':289 'anchor':110 'api':139,256,389 'appli':491 'area':14,462,486 'areaserv':474 'ask':290 'audit':6,177,306,339 'automot':531 'avail':185,254,327,332 'b':205 'backend':132,156 'balanc':252 'becom':373 'best':375 'best-effort':374 'block':602 'brick':9,449 'brick-and-mortar':8,448 'brooklyn':214 'busi':19,22,56,100,146,430,463,615,739 'business-typ':429 'c':218 'call':635 'canon':247 'cap':329 'check':148,190,309,490 'citat':39,83,536 'citation-sourc':535 'citi':731 'city/region':223 'classifi':444 'claud':181 'click':633 'click-to-cal':632 'come':471 'concept':125 'confirm':268,272 'connect':167 'consist':29,77,502,690 'context':180 'continu':294 'contract':427 'correl':625 'cost':298 'count':636 'countri':220 'cover':20 'credit':251,304,325 'data':178 'dataforseo':140 'degrad':361 'deliver':104,161 'dentist':213 'detect':367,432,511,661,683 'determin':488 'dimens':127 'directori':44,88,553 'display':737 'domain':179,201,267,315 'downstream':492 'drive':63 'drop':153 'e.g':212,483 'effort':376 'element':371,638 'emb':677 'embed':458,496,583 'embedded-map':495 'enough':441 'enrich':420,426 'equival':155 'estat':530 'estim':295 'everi':752 'extract':342,372,582,722 'factor':631 'fallback':191,321 'fetchabl':271 'firecrawl':137,193,253,317,324,358,382,562,564,656,686,693,695 'firecrawl-mcp':561,692 'fix':108 'footer':436,743 'footprint':84 'forc':384 'format':567,738 'full':425 'g.page':645 'g.page/...':644 'ga4':409,414 'gbp':71,230,336,555,594,639,679 'gbp-on-pag':335 'generic':532 'geo':143 'geo-grid':142 'github.com':118 'github.com/agricidaniel/claude-seo)''s':117 'googl':21,48,138,255,388,584 'grid':144 'gsc':392,396 'hard':328 'healthcar':525 'home':527 'homepag':203,269,286,350,434,570,698,704 'hour':616 'href':736 'hybrid':479 'id':589 'ideal':222 'ifram':460,586,670 'industri':509 'industry-vert':508 'infer':282,521 'inspect':378 'integr':72 'intent':82,579 'json':600,673,749 'json-ld':599,672,748 'keyword':103,211,277 'land':418 'later':544 'ld':601,674,750 'least':207,274 'legal':526 'limit':158 'link':641,664,682 'list':109,147,231 'load':545 'local':3,4,35,51,55,65,81,95,122,171,210,226,276,397,403,578 'local-pack':34,64,94,170,225,402 'local-seo-report.md':505 'locat':18,711 'logo':741 'lose':669 'map':141,459,497,585,676 'maps.app.goo.gl':649 'maps.app.goo.gl/...':648 'mark':675 'markdown':439,659 'markup':597 'mcp':165,560,563,691,694 'mirror':129 'mit':124 'mortar':11,451 'multi':17 'multi-loc':16 'name':740,745 'nap':28,76,341,689,724,746 'near':68,216 'no-firecrawl':380 'none':281 'normalis':261 'note':260 'observ':112 'on-pag':78,174 'one':106,208,275,446,522 'open':621 'open-at-search-tim':620 'option':229,318 'organ':416 'organic-by-landing-pag':415 'overview':316 'pack':36,66,96,172,227,404 'page':31,75,80,176,338,353,419,519,559,574,619,701,703,712,719 'pars':751 'pass':379 'pattern':514,729 'perform':399 'phone':734 'physic':500 'physical-address':499 'pick':713 'place':588 'platform':91 'plumber':215 'plus':707 'postal':733 'preflight':242,250 'prerequisit':162 'presenc':92,603 'present':482,591 'primari':102,209 'prioritis':107 'process':238 'profil':23,640,681 'profile-link':680 'prose':377,437,520,727 'protocol':265 'provid':197,279,354 'queri':313,398 'rank':37,97,136,164,173,297,405,627 'rawhtml':568,581 're':308 're-check':307 'read':433 'real':529 'recommend':538,543 'record':503,587 'references/local-citation-sources.md':546 'region':469,732 'render':667,726 'requir':687 'restaur':524 'review':46,90,236,345,355,592 'review-platform':89 'rewir':133 'rich':595 'rout':534 'run':347 'sab':464,493 'sampl':40,352,700,702 'schema':33,476,541,744 'schema-subtyp':540 'schema/json-ld':366 'scope':228 'score':53 'scrape':237,346,565,569,696 'se':135,163,296 'search':623 'see':157,243,421 'sens':189 'sense-check':188 'seo':2,5,52,121 'seo-loc':1,120 'serp':312,614 'serv':468 'server':166 'servic':13,461,485,528,709 'service-area':12 'showroom':484 'signal':24,61,113,481,556,607 'site':610 'sitemap':715 'skill':123,258,301 'skill-seo-local' 'skill-specif':257 'skills/seo-firecrawl/references/preflight.md':244 'skills/seo-google/references/cross-skill-integration.md':422 'skip':494,685 'snapshot':506 'snippet':596 'sourc':537 'source-seranking' 'specif':259 'stage':249 'star':612 'step':333,360,394,406,412 'still':288 'street':453,466,730 'strip':264 'strongest':606 'structur':128 'subtyp':542 'target':200,219,241,263 'tel':369,663,735 'tier':42,86,390,407,551 'time':624 'tool':184 'top':717 'topic-agent-skills' 'topic-ai-search' 'topic-anthropic' 'topic-backlinks' 'topic-claude' 'topic-claude-code' 'topic-claude-plugin' 'topic-claude-skills' 'topic-content-brief' 'topic-ga4' 'topic-keyword-research' 'topic-mcp' 'track':38 'traffic':718 'trust':50 'type':431 'unavail':195,657 'unlock':393,411 'upstream':131,151 'url':204,232,234,356,513 'us':456 'use':168,186 'user':196,292 'valid':240 'vertic':510,549 'visibl':70,452,617,723 'visit':455 'want':611 'webfetch':183,320,364,386,438,658 'webfetch-on':363,385 'websit':27,58 'whichev':573 'whitespark':628 'widget':593 'without':357,477 'www.google.com':653 'www.google.com/maps/place/...':652 'yelp':49 'yelp/trustpilot':233","prices":[{"id":"6e7b6a81-ce4b-42fc-ba26-b6c1e36366c0","listingId":"f9b9e2be-75d3-47cd-956e-dfa240654ada","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"seranking","category":"seo-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:10.486Z"}],"sources":[{"listingId":"f9b9e2be-75d3-47cd-956e-dfa240654ada","source":"github","sourceId":"seranking/seo-skills/seo-local","sourceUrl":"https://github.com/seranking/seo-skills/tree/main/skills/seo-local","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:10.486Z","lastSeenAt":"2026-05-18T19:08:36.721Z"}],"details":{"listingId":"f9b9e2be-75d3-47cd-956e-dfa240654ada","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"seranking","slug":"seo-local","github":{"repo":"seranking/seo-skills","stars":9,"topics":["agent-skills","ai-search","answer-engine-optimization","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills","content-brief","ga4","generative-engine-optimization","keyword-research","mcp","mcp-server","search-console","seo","seo-tools","seranking","site-audit"],"license":"mit","html_url":"https://github.com/seranking/seo-skills","pushed_at":"2026-05-11T20:07:40Z","description":"Claude SEO Skills — production Claude Agent Skills for the SE Ranking MCP server. Content briefs, AI Search share of voice, audits, backlink gaps, keyword clusters, schema, sitemap, GEO, and more.","skill_md_sha":"a4abb410da111d42676d0665591ddb7c10327d49","skill_md_path":"skills/seo-local/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/seranking/seo-skills/tree/main/skills/seo-local"},"layout":"multi","source":"github","category":"seo-skills","frontmatter":{"name":"seo-local","description":"Local SEO audit for brick-and-mortar, service-area, and multi-location businesses. Covers Google Business Profile signals on the website, NAP consistency across page and schema, local-pack rank tracking, citation samples on Tier-1 directories, and reviews on Google / Yelp / Trustpilot. Distinct from `seo-page` (URL-level keywords, no local layer) and from `seo-schema` (which generates LocalBusiness markup — this skill defers to it). Use when the user asks \"local SEO\", \"GBP\", \"Google Business Profile\", \"NAP\", \"local pack\", \"citations\", \"near me\", \"service area\", or \"multi-location SEO\"."},"skills_sh_url":"https://skills.sh/seranking/seo-skills/seo-local"},"updatedAt":"2026-05-18T19:08:36.721Z"}}