From a new WordPress site to ChatGPT and Gemini citations in six weeks.

AZ Coatings LLC · Engagement started Apr 8, 2026 · Work is ongoing

AZ Coatings is a multi-state commercial roofing contractor with offices in Southeast Michigan (headquarters) and Southeast Florida, operating across Michigan, Florida, Ohio, and Indiana, and specializing in polyurea coatings. When the engagement started on April 8, 2026, the site was a brand new 7-page WordPress build with effectively zero structured data and no AI visibility for its core prompts.

Six weeks and six phases later, AZ Coatings is named in ChatGPT, shown in the ChatGPT map result with a 5.0 rating, and cited inline in Gemini answers for buyer queries like “polyurea roof coatings” and “polyurea commercial roofing” (for users located in Michigan, since AI engines pass user location automatically). The engagement continues.

Client

AZ Coatings LLC

Multi-state commercial roofer specializing in polyurea coatings. Southeast Michigan HQ, Southeast Florida office.

Engagement

Started Apr 8, 2026

Six weeks shipped across six phases. Engagement is ongoing.

Starting Point

Zero structured data

A brand new 7-page WordPress site. No SSH. No Git. Only REST API and wp-admin.

Six Weeks In

Cited in ChatGPT and Gemini

5.0 in the ChatGPT map result for "polyurea roof coatings" (for users in Michigan). Inline citations in Gemini answers.

Where AZ Coatings shows up today.

These are unedited screenshots of ChatGPT and Gemini responding to real polyurea roofing prompts. The business is named, linked, and shown in the map view. The snippet text comes directly from the new meta descriptions. The inline definition language draws on the rewritten Polyurea page.

ChatGPT map result for a polyurea roof coatings query, showing AZ Coatings highlighted with a 5.0 rating among Michigan roofing contractors.
ChatGPT map result for the buyer query "polyurea roof coatings" (for a user in Michigan). AZ Coatings appears at the top with a 5.0 rating, in front of established commercial roofers.
ChatGPT Sources panel listing AZ Coatings at azcoatingsllc.com as a cited source, with the new meta description visible as the snippet.
ChatGPT cites azcoatingsllc.com directly. The snippet text is the rewritten meta description shipped during the citation recovery sweep.
Gemini answer body naming AZ Coatings inline as a notable regional polyurea contractor, with the AZ Coatings logo tooltip visible on the linked citation.
Gemini names AZ Coatings inline as a notable regional contractor. The linked citation surfaces the AZ Coatings shield logo on hover.
Gemini answer for a polyurea commercial roofing query, describing polyurea as a high-performance elastomeric coating sprayed over existing roofing substrates.
Gemini overview answer for the buyer query "polyurea commercial roofing" (for a user in Michigan). The answer body draws on the same definition language deployed in the Polyurea page rebuild.

What it looked like on April 8.

A brand new WordPress build, no schema, no blog, no developer access to the box. The starting state is worth recording in detail because most of the constraints below shaped the architecture of every fix that followed.

Stack
WordPress 6.x, Hello Elementor, Elementor Pro 3.35, LiteSpeed Cache
Hosting
Hostinger shared
Access
WordPress REST API + wp-admin only. No SSH, Git, or CI.
Pages
7 (Home, About, Contact, Polyurea Roofing, Industrial, Michigan, SE Florida). No blog.
Structured data
Effectively none beyond plugin defaults
Brand collision
An unrelated "AZ Custom Coatings" in Tempe, AZ was confusing AI entity resolution
Founding date
Site said 2003. Actual: 2021.

The work, broken out.

Each phase below is a real shipping window with a single motivating idea, plus the concrete artifacts that landed during that window.

Phase 1Apr 14 to 16

SEO and AEO overhaul

Build the structured data foundation and stand up the geographic hierarchy.

  • Two new regional pages (Michigan, Southeast Florida)
  • Service, RoofingContractor, DefinedTerm, HowTo, Review, and Person schema across the core five pages
  • Two subOrganizations under the parent Organization (Michigan HQ, Florida office)
  • "Meet the Founders" section with Person schema for Jason and Zyljana Daggy
Phase 2Apr 24

Citation recovery sweep

Direct-answer content and meta rewrites targeting commercial polyurea search.

  • 6 new sections + FAQ schema each on Polyurea, Michigan, and SE Florida
  • 3 sections + Service schema on Industrial (5 offerings: roof, floor, secondary containment, water treatment, hangar)
  • 18 contextual cross-links across the 5 target pages
  • Meta description rewrites that fixed a broken homepage and a Michigan-to-Florida copy paste
Phase 3Apr 30

Schema hygiene

Discovered Google merges entities sharing an @id. Made @id ownership canonical.

  • Single canonical source per @id (SEO plugin emits basic Organization; sitewide snippet purely additive)
  • Inline references converted to @id-only refs
  • Killed duplicate FAQPage emissions
Phase 4May 1

Home polish + VideoObject

Google Search Console flagged "Video isn't on a watch page." Solved with schema, not hiding.

  • VideoObject markup with uploadDate, duration, thumbnailUrl, publisher @id reference
  • Credential icon-box grid refinements + typography sync
  • Schema-first response to the GSC warning instead of removing the video
Phase 5May 14 to 15

Blog system on a stack that does not support it

Hello Elementor + Elementor Pro do not trigger Single Post template swap. So bypass the Theme Builder.

  • Each post bakes Hero, Content, Author Byline, and CTA into its own Elementor data using canvas template
  • Archive template with custom CSS to defeat a transform offsetting thumbnails ~190px
  • 5 articles primed, 1 published (/blog/polyurea-vs-silicone/)
  • Per-post BlogPosting JSON-LD using @id refs to existing entities (never re-declares canonical fields)
Phase 6May 15 to ongoing

Invisible AEO refinement

Quiet structural fixes targeting Entity Consistency, Content Freshness, and Definition Blocks.

  • Blog post meta title trimmed from 83 to 56 characters
  • Brand normalization across bylines, pullquotes, bio ("AZ Coatings LLC" to "AZ Coatings")
  • A custom mu-plugin injects dateModified into blog, category, and author archives (the SEO plugin in use does not expose archive freshness by default)
  • Entity disambiguation: disambiguatingDescription + 5-element alternateName array to separate AZ Coatings (Michigan) from AZ Custom Coatings (Tempe, AZ)
  • 5 stale "2003" references corrected to "2021" across visible copy and structured data
  • Footer brand standardization across UAE template post 16

AI engines see one clearly identified business

The Michigan headquarters, the Florida office, and both founders are now described as one connected business. AI engines stop confusing AZ Coatings with an unrelated Arizona company that uses a similar name, so answers point at the right contractor in the right state.

Buyer questions have direct answers on the site

The new Michigan and Florida pages, plus a rewritten polyurea section, answer the questions buyers actually type: what polyurea is, whether it is walkable, how it compares to a full roof replacement, and what it costs. ChatGPT and Gemini can pull those answers straight from azcoatingsllc.com.

The site stays current and consistent across pages

Update dates on the blog and archive pages stay accurate everywhere, and the entity signals (founding year, services, geographies) match across every page. AI engines pull current content from a site that looks alive, not one ranked as stale.

AEO is holistic. The website is one layer.

Everything above is on-site work: schema, content, AI-readable surfaces, freshness. That layer is necessary but not sufficient. AI engines also weigh what the rest of the web says about a business. Listings on local commerce websites, industry directories, trade associations, regional review sites, and a hardened Google Business Profile all corroborate or contradict the on-site claims, and AI answers lean on whichever side has more independent agreement.

For AZ Coatings, on-site work produced the first wave of citations. The next phase widens the same identity layer across the rest of the web so AI answers keep pointing at the right contractor across every state the business serves:

  • Local commerce listings across Michigan, Florida, Ohio, and Indiana: chambers of commerce, regional business hubs, and city or county directories where commercial buyers (and AI engines) verify a contractor exists in the service area
  • Industry directories and trade associations for polyurea contractors, commercial roofing, and industrial coatings, where the business profile and capabilities can be confirmed by a credible third-party source
  • Regional roofing review sites and trade publications, so the 5.0 Google rating is mirrored by independent reviews and editorial mentions
  • Google Business Profile hardening: services, photos, regular posts, and review velocity, so the map listing keeps pace with the on-site entity graph

AI answers that pull from one source are easy to dispute. AI answers that pull from many sources saying the same thing are sticky. The on-site work made the site quotable. The off-site work makes the quotes durable. See the 16-factor methodology for how off-site corroboration fits into the broader model.

11pages in production
12JSON-LD schema types deployed
75aeo-audit aggregate score (per-page Schema Validity 100/A+)

The schema graph in production includes Organization, RoofingContractor (with two subOrganizations for the Michigan and Florida offices), Service, DefinedTerm, HowTo, Review, Person (for both founders), VideoObject, BlogPosting, and FAQPage. A single mu-plugin handles archive dateModified injection. Three sitewide code snippets handle the LocalBusiness Organization, llms link tag, and FAQPage emission.

The aggregate score above comes from @ainyc/aeo-audit, our open-source npm package that scores any public URL across 16 on-site AEO factors (structured data depth, schema validity, AI-readable files, entity consistency, definition blocks, and more). The same engine powers the free AEO check on this site.

Schema-first beats content-first when access is locked down

A surgical meta + Organization schema rewrite, paired with two new regional pages, did more for AI citation than any volume of additional body copy. Structured data is where the AI retrieval layer reads first.

MCP turns WordPress into a programmable surface

The Elementor MCP plugin (97 tools) replaced "push the whole page" exports with surgical widget and container edits on production and staging. Repo files stayed the source of truth; MCP applied the diffs.

@id collisions are invisible until they break

Google merges any entities sharing an @id and flags every duplicated field, even when the values are identical. The fix: refactor to a single canonical source per @id, with inline references converted to @id-only refs.

Cache discipline is non-negotiable

Every Elementor MCP change requires an Elementor CSS purge plus a LiteSpeed purge or the change is invisible. One "Clear Files and Data" silently dropped a widget-level custom font sitewide. Post-cache-clear font verification is now part of the workflow.

Brand guardrail: invisible vs visible

Invisible structural fixes (schema, mu-plugins, sitemap entries) ship freely. HowTo, FAQ, and Person schema with quotable text needs per-item sign-off, because those quotes are exactly what AI assistants surface in citations.

Entity disambiguation is a real AEO factor

A separately owned "AZ Custom Coatings" in Tempe, AZ was muddying the brand. disambiguatingDescription plus an alternateName list across the structured data was load-bearing for clean AI entity resolution.

The engagement continues.

Six weeks in is not a finish line. These are the active workstreams as the engagement moves into its second phase.

Continuous citation monitoring through Canonry

Canonry, our open-source AEO operating system, tracks how ChatGPT, Claude, Gemini, Perplexity, and Copilot answer the buyer prompts AZ Coatings cares about, week over week, with the target Michigan geography passed on every check. New citations get logged; regressions get flagged before they linger.

Off-site corroboration rollout

Building presence across the local commerce websites, industry directories, association profiles, and regional review sites outlined in the Beyond The Site section above. Each state served (Michigan, Florida, Ohio, Indiana) gets its own short list of credible third-party surfaces that match the on-site entity graph.

Google Business Profile optimization

The ChatGPT map result already shows 5.0 for users in Michigan. The next step is hardening the underlying Google Business Profile (services, photos, posts, review velocity) so the map listing keeps pace with the on-site entity graph.

More published blog posts

Four primed drafts queued behind the live polyurea-vs-silicone post. Each one ships with per-post BlogPosting JSON-LD that references the existing canonical entities by @id.

Re-score each change with the audit engine

Before any schema or content change ships to production, the team re-runs @ainyc/aeo-audit (the 16-factor open-source engine that powers the free AEO check) on the page that was touched, to confirm the affected factor actually moved.

Start with the free audit, then map the same approach to your site.

The AZ Coatings engagement follows the same 16-factor on-site model that powers the free audit. If you want to see where your own site stands across structured data, AI-readable files, entity consistency, and definition-block content, start there.