Install
$ agentstack add skill-hainrixz-claude-seo-ai-seo-local ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
seo-local (M19)
Local pages live and die on consistent, machine-readable place data. Conditional module: only runs when the page is classified local-business (storefront, service-area, multi-location, contact/location page). Reference: references/schema-tier1.md (LocalBusiness row).
Audits
Working from the PageSnapshot (rendered_dom if present, else raw_html), only for local-business pages:
- LocalBusiness schema: a
LocalBusiness(or correct subtype, e.g.Restaurant,Dentist) JSON-LD block with required props —name,address(PostalAddress),telephone. - NAP consistency: visible Name / Address / Phone match across the page (header, footer, contact block) and match the schema values — no formatting drift, no stale numbers.
- Geo coordinates:
geo(GeoCoordinateswithlatitude/longitude) present and plausible for the stated address. - Opening hours:
openingHoursSpecificationpresent, structured (dayOfWeek,opens,closes), and agreeing with any visible hours. - Service-area: for service-area businesses,
areaServeddeclared rather than (or alongside) aPostalAddressstorefront. - GBP alignment (advisory): NAP, categories, and hours should match the Google Business Profile — the tool cannot read GBP, so this is advisory only.
Fixes
- AUTO: generate a complete, valid
LocalBusinessJSON-LD block from user-confirmed NAP, hours, geo, and service-area, with a stable@id. The block is a diff forfix. - NAP / hours drift: PROPOSED — surface the mismatch and a draft correction for per-item accept (the tool cannot know which value is canonical).
- GBP alignment: ADVISORY — never written by the tool.
Never fabricate an address, phone, coordinates, or hours — ask the user or leave a clearly-marked TODO placeholder they fill before injection.
Verification
- Offline:
node ${CLAUDE_SKILL_DIR}/../../scripts/validate-jsonld.mjs --url(schema_validator) — JSON validity + required LocalBusiness props;dom_assertconfirms visible NAP matches schema. - Tier 1: confirm rich-result eligibility with Google Rich Results Test / schema.org validator. When the data tier (or GBP) is unavailable, status is
needs_api— never a falsepass.
Findings
Emit findings per schema/finding.schema.json. On a non-local page these are not_applicable (severity 0); on local pages severity is 4, axis both. Examples:
M19.localbusiness.missing— local page with no LocalBusiness schema (statusfail, severity 4,fixable: auto, axisboth, confidenceestablished).evidence.observedquotes the visible address/phone with no matchingld+json;verification.reproduceruns the validator above.M19.nap.inconsistent— footer phone differs from schematelephone(statuswarn, severity 4,fixable: proposed, axisboth, confidencedirectional).evidence.observedquotes both strings; verified bydom_assert.M19.hours.missing— noopeningHoursSpecificationdespite visible hours (statuswarn, severity 4,fixable: auto, axisboth, confidenceestablished).
Each finding: evidence.observed quotes the page; expected_impact is banded + confidence-tagged (no naked %).
Honesty
- Consistent NAP + structured place data are established signals for local pack/maps and AI place answers; raw on-page proximity/ranking gains are not promised here — the dominant local-pack factors (proximity, GBP signals, reviews) sit outside the page DOM and are advisory.
- Adding
geo/openingHoursSpecificationwill not by itself move local rankings without an accurate, verified GBP; never ship that as a guaranteed win. - Do not invent coordinates from an address via an unverified geocode and present them as fact — mark unconfirmed values
TODO.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Hainrixz
- Source: Hainrixz/claude-seo-ai
- License: MIT
- Homepage: https://tododeia.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.