seo-local
SkillAI & modelsUse when optimizing local SEO — Google Business Profile, NAP consistency, Local Pack ranking, location pages.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the seo-local skill
What this skill tells your AI
The instructions your AI receives, as published by fusengine/agents in plugins/seo/skills/seo-local/SKILL.md and read by ahel’s review.
Local SEO
Workflow
- Audit Google Business Profile (categories, hours, photos, posts, services)
- Check NAP consistency across web (citations: Yelp, Bing, Apple Maps, industry directories)
- Analyze reviews (volume, recency, response rate, sentiment)
- Map ranking in Local Pack for target keywords + geo
- Optimize location pages (one per service area, LocalBusiness schema)
NAP Consistency
Must be character-for-character identical on the site, GBP, and every directory:
[Business Name]
[Street Number] [Street], [Suite]
[City], [Region] [Postal Code]
[+CC Phone]
- Abbreviations must match too:
Route≠Rte,Suite≠Ste. One variation fractures the entity.
GBP as an Entity Signal (2026)
- GBP is no longer just a local directory — AI engines cross-reference it as an entity anchor. ~42% of local AI citations originate from listings.
- A complete profile = ~2.7x more likely to rank in the Local Pack. Fill categories, hours, photos, posts, services.
- Service areas = named cities / postal codes only (max ~20). Country- or state-wide service areas are no longer allowed (Google change, June 2025).
Quality Gates
- Warning at 30+ location pages
- Hard stop at 50+ location pages (manual audit required)
- Each location page must have unique content (not template fill-in)
LocalBusiness Schema (GEO-priority)
AI engines (ChatGPT, Perplexity, Gemini) parse LocalBusiness JSON-LD to answer "best [service] near me". Precise geo + areaServed = better entity resolution in local AI Overviews.
{
"@context": "https://schema.org",
"@type": "[SpecificType]",
"name": "[Business Name]",
"address": { "@type": "PostalAddress", "streetAddress": "[Street]",
"addressLocality": "[City]", "addressRegion": "[Region]",
"postalCode": "[Postal Code]", "addressCountry": "[CC]" },
"geo": { "@type": "GeoCoordinates", "latitude": "[lat]", "longitude": "[lng]" },
"areaServed": { "@type": "GeoCircle",
"geoMidpoint": { "@type": "GeoCoordinates", "latitude": "[lat]", "longitude": "[lng]" },
"geoRadius": "[meters]" },
"sameAs": ["[GBP URL]", "[directory URL]", "[social URL]"],
"openingHoursSpecification": [{ "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday"], "opens": "[HH:MM]", "closes": "[HH:MM]" }],
"aggregateRating": { "@type": "AggregateRating",
"ratingValue": "[x.x]", "reviewCount": "[n]" }
}
@type: use the specific subtype (Plumber,Dentist,Restaurant…), not genericLocalBusiness— better category matching.geo(GeoCoordinates): disambiguates the entity; coordinates must match the GBP pin and Apple Maps.areaServedasGeoCircle(geoMidpoint + geoRadius): drives "near me" matching for LLMs.sameAsarray (GBP + directories + socials): confirms existence across authoritative sources.- LLMs do cite local businesses when schema + GBP + reviews are solid.
References
seo-schema— LocalBusiness JSON-LD (templates/json-ld/localbusiness.json)seo-entity— declare the business entity via sameAs (Wikidata, GBP)skills/seo/10-local-seo/(gbp, nap-citations, reviews, local-pack, landing-pages, local-backlinks)
Signals
- GitHub stars
- 25
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
seo-local-fusengine- Source
- github.com/fusengine/agents