seoskills.sh
Catalog/seoskills/internal

Multi-Location NAP Consistency Crawler

Crawls the site's location pages and major citation directories to extract each location's name, address, and phone, th…

0 installs

Use this skill

$ npx skills add seoskills.sh/nap-consistency-crawler
Category
Repository
seoskills/internal
GitHub stars
License

SKILL.md

---
name: Multi-Location NAP Consistency Crawler
description: Crawls the site's location pages and major citation directories to extract each location's name, address, and phone, then normalizes and diffs them to flag inconsistencies, formatting drift, and missing citations. Use when the user manages multiple locations and needs NAP consistency auditing, citation cleanup, or local-listing accuracy checks.
category: local-seo
---

# Multi-Location NAP Consistency Crawler

AGENT ROLE: Autonomous NAP-integrity agent. Extract each location's Name/Address/Phone from every source, normalize, diff against the canonical record, and emit the JSON in `references/output.schema.json`.

## OBJECTIVE
For each business location, establish a canonical NAP and detect every place (own site pages, citation directories) where it differs — even by formatting — plus flag directories where the location is missing.

## INPUTS
- `locations` (REQUIRED): array of `{ id, canonical: { name, address, phone }, page_urls: string[] }`.
- `citation_urls` (OPTIONAL): map of `location_id → [directory listing URLs]` to check (Yelp, BBB, Apple Maps, industry directories).
- `strict_phone` (OPTIONAL bool, default false): if true, formatting differences in phone count as mismatches; default normalizes to digits.

## AUTHENTICATION / RUNTIME
- No API key. Keyless HTTPS GET, UA `seoskills-nap/1.0`, honor robots. Some directories block bots — treat blocks as `unverifiable`, not `mismatch`.

## EXPECTED TOOL CALLS
- Run `scripts/nap_crawl.py --locations locations.json [--citations citations.json]`.
- Per source URL: GET; extract NAP from `LocalBusiness`/`PostalAddress` JSON-LD first, then microdata, then visible-text heuristics.

## PROCEDURE (deterministic, per location)
STEP 1 — CANONICAL: normalize the supplied canonical NAP (see normalization below).
STEP 2 — For each `page_url` and `citation_url`: fetch, extract NAP (schema → microdata → regex fallback), normalize.
STEP 3 — NORMALIZE: name → lowercase, strip legal suffixes/punctuation; address → USPS-style abbreviations (Street→St, Suite→Ste), collapse whitespace; phone → digits only (unless `strict_phone`).
STEP 4 — DIFF each source's normalized NAP vs canonical; classify per field `match | mismatch | missing`. A source with any field mismatch = `inconsistent`.
STEP 5 — MISSING CITATIONS: any `citation_url` that returns no detectable listing for the location → `missing_citation`.
STEP 6 — SCORE `consistency = matched_fields / total_checked_fields` per location; EMIT inconsistencies grouped by location, each with the exact source URL and the field-level before/after.

## RATE LIMITS & ERROR HANDLING
- Politeness: ≤ 3 concurrent per host, ≥ 250ms spacing. Timeout 15s.
- IF a source returns `403`/`429`/CAPTCHA THEN mark that source `unverifiable` (NOT a mismatch) and continue — never assert inconsistency from a blocked fetch.
- Retry transient `5xx` ≤ 2.

## MISSING / INSUFFICIENT DATA
- IF no NAP can be extracted from a source THEN `extraction="failed"` for that source (distinct from a real mismatch).
- Formatting-only differences (e.g., "Suite 200" vs "Ste 200") normalize to a match unless the raw strings are requested; always return both `normalized_match` and the raw values.
- Never guess an address; only report what was extracted.

## OUTPUT
One JSON object per `references/output.schema.json`. No prose.

## FILES
- `scripts/nap_crawl.py` — multi-source NAP extraction, normalization, diff, scoring.
- `references/output.schema.json` — output contract.

Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.

Embed a badge

seoskills.sh install badge

More in Local SEO

Local SEOagricidaniel/claude-seo

seo-local

Local SEO analysis covering Google Business Profile optimization, NAP consistency, citation health, review signals, local schema markup, location page quality, multi-location SEO, and industry-specific recommendations. Detects business type (brick-and-mortar, SAB, hybrid) and industry vertical. Use when user says "local SEO", "Google Business Profile", "GBP", "map pack", "local pack", "citations", "NAP consistency", "service area", or "multi-location".

5.3K installs
Local SEOeronred/aso-skills

localization

When the user wants to localize their App Store listing for international markets. Also use when the user mentions "localization", "translate my app", "international markets", "expand to new countries", "localize metadata", or "which countries should I target". For keyword research in specific markets, see keyword-research. For metadata writing, see metadata-optimization.

2.9K installs
Local SEOcalm-north/seojuice-skills

rank-local

Build a local SEO strategy covering Google Business Profile, local citations, reviews, and NAP consistency. Use when the user asks about local SEO, Google Business Profile, Google Maps ranking, local pack, NAP consistency, local citations, review strategy, or ranking for "[service] near me" searches.

2.5K installs
Local SEOkostja94/marketing-skills

local-seo

No description available.

2.3K installs
Local SEOjezweb/claude-skills

seo-local-business

Generate complete SEO setup for local business websites — HTML head tags, JSON-LD LocalBusiness schema, robots.txt, sitemap.xml. Australian-optimised with +61 phone, ABN, suburb patterns. Use whenever the user wants SEO for a local business (tradesman, café, clinic, agency, retailer), needs JSON-LD structured data, asks for LocalBusiness schema, or wants meta tags / robots.txt / sitemap for a suburb-serving business.

1.7K installs
Local SEOanycap-ai/anycap

anycap-ai-tool-seo

Guide for planning and auditing SEO for AI tool, SaaS, and product-led websites. Powered by AnyCap -- the capability runtime that equips AI agents with web search and web crawl through a single CLI. Use when Codex needs to define SEO ICPs, map search intent to page types, inspect live SERPs, write page briefs for tool/comparison/alternatives/pricing/tutorial pages, prioritize technical SEO foundations, plan citations or backlinks, or decide whether programmatic SEO is safe and worthwhile. Trigger on mentions of AI tool SEO, SaaS SEO, product-led SEO, search intent, page type mapping, vs pages,

472 installs