Local SEO for Michigan dispensaries. The layer AEO inherits from.
We ship the Google Business Profile, the schema.org blocks, the entity record, and the neighborhood citations a Michigan dispensary needs to be the citation upstream its AEO layer reads from. Without it, the AI assistants name a competitor instead of you.
Local SEO ships inside the retainer. Submitted intake starts the four-step engagement.
What we ship
Four pillars. The citation graph the AEO layer lifts from.
One pillar per surface. Each pillar stands as a deliverable and a check the AI assistants run when they decide whether to name your dispensary or a competitor in the answer.
What we ship
A full GBP buildout per location: primary and secondary categories, attribute set matched to the license class, hours that match real-world hours, weekly posts, and a photo cadence that keeps the listing from drying out.
Where it lands
The map pack, the local finder, and the citation block that Gemini and AI Overviews read as the canonical name-and-address answer for a Michigan dispensary.
Why it matters
The map pack is where an AI assistant starts reading whether a dispensary exists. A sparse GBP reads as a thin local entity across every model we query downstream.
What we ship
A schema.org shipment per location and per menu page: LocalBusiness with all of the cannabis-specific property extensions, Menu and MenuSection on the storefront, and Product nodes with strain lineage, THC percentage, and terpene profile where the menu vendor supports it.
Where it lands
The JSON-LD blocks the menu vendor publishes, the schema.org blocks the in-house developer ships, and the citation panels Google AI Overviews lift into the answer.
Why it matters
Schema is the surface the assistants lift. A LocalBusiness, Menu, and Product shipment is the difference between a citation and an absence in the AI answer.
What we ship
Name, address, phone, license, hours, and store URL consolidated across every surface that publishes them, with a single canonical record a citation vendor can reconcile to and an agency can re-use without divergence.
Where it lands
Citation directories, Wikidata, license-tie aggregators, your own site, your menu vendor, and the disambiguation between your store and your brand.
Why it matters
Every citation surface that disagrees with another splits your store in the entity graph. Two records of your store at the same address read as two competitors to the model.
What we ship
A citation plan built per city, not at the brand level: cannabis-friendly directories, Michigan-specific aggregators, neighborhood press, and the city-level pages that link to your dispensary rather than to the brand.
Where it lands
Per-city citation graphs, the link neighborhoods the assistants scan when a shopper asks for the best dispensary in a specific ZIP, and the local press surfaces AI Overviews lift into the citation panel.
Why it matters
Brand-level citations do not fire for a ZIP-level query. A shopper near Ypsilanti is not asking which dispensary has the best brand mentions. They ask which dispensary lives in their city.
In the retainer
Two headline builds. Two supporting reviews. One retainer.
Every local-SEO engagement ships the same four pieces. What changes is the content inside the GBP buildout, the schema shipment, the NAP review, and the fix list.
- Per-location pass / fail list with categories, attributes, hours, and the cannabis-specific fields filled.
- Weekly post and photo cadence with a calendar document your team can hand to anyone.
- A monthly GBP health check that catches new gaps before they read as stale in the local pack.
- JSON-LD blocks per location, ready to paste, with the cannabis-specific extensions included.
- Menu and Product schema the menu vendor can ship without a custom build, plus a doc naming the parts that need a developer.
- A validation report naming the schema that passes Google Rich Results and the schema that needs a second pass.
Pairs with the AEO audit
Local SEO builds the citation graph. AEO measures who lifts from it.
The two halves of the engagement layer. Local SEO ships the surfaces the assistants read. AEO reads those surfaces and names which prompts still leave the answer blank. Run the local-SEO retainer first, then the AEO audit on top.
Who the retainer is for
Three operator profiles that contact us first.
The local-SEO retainer fits operators who already know the map pack is a gap but do not yet have someone shipping the schema, the entity work, and the citations. Three profiles that show up in intake most often.
The four-step engagement
From submitted intake to an ongoing retainer.
The local-SEO engagement runs the same four steps every time. What varies is the city set, the competitor surface, and the gap the GBP audit reads on day one.
- 01
Intake and city set
A five-field form at /contact. Your dispensary, your license, your city set, the menu URL, and the competitor name you keep losing the map pack to.
- 02
GBP audit and entity scrub
Per-location GBP audit, name-and-address scrub, and entity graph check. The audit names what is missing today and the surfaces that need a developer versus a citation vendor.
- 03
Schema shipment and citation plan
JSON-LD blocks per location, schema shipment to the menu vendor, and a per-city citation plan with the directories and aggregators that fire for a ZIP-level query.
- 04
Ongoing retainer
Weekly GBP posts, monthly schema checks, quarterly citation refresh, and the AEO audit running in the second month so the local-SEO upstream layer gets measured against the AI answers that follow.
“AEO is what an assistant answers today. Local SEO is the citation graph that makes that answer possible. Every recommendation in the retainer is rooted in a Michigan surface we can ship this month, not a national tactic a vendor is pitching you.”
The local-SEO retainer ships the graph. The AEO audit measures who lifts from it.
One practitioner ships the GBP, the schema, the entity work, and the citations. Randi reads every submission and replies within one business day.
Same practitioner. Same person shipping the build.