Two weeks ago I admitted in public that Mainsail — a local SEO studio — didn’t show up in ChatGPT, Perplexity, or Google AI Overviews when you asked about web design in Greenville. I said I’d fix it in public and update monthly. This is the first update.
Spoiler: I haven’t fixed it. The site is fifteen days old as of writing. AI-search visibility is a 60-to-180-day game even when you do everything right; nobody moves the needle in two weeks.
But I did do most of the foundation work. Here’s the honest list of what shipped, what each change is supposed to do, and what’s still on me to finish.
What changed under the hood
1. Robots.txt now explicitly invites the AI bots.
The default Astro robots.txt allows everyone — which technically lets the AI crawlers in, but doesn’t signal anything. I rewrote it with explicit Allow: stanzas for sixteen named crawlers: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Amazonbot, CCBot, plus the meta-corp crawlers. Then explicit Disallow: for the scraper bots that don’t drive citations or training value (Bytespider, Diffbot, etc.).
Whether the named-allow stanzas actually move the needle vs. a permissive default is debatable. The thinking: if a crawler reads robots.txt and sees its name explicitly allowed, that’s a stronger signal than implicit permission via the catch-all. Either way, the disallow side is the real benefit — scraper bots eat bandwidth without paying us back.
2. The schema sameAs scaffold has real entries now.
Two weeks ago, the only sameAs links on Mainsail’s Organization schema pointed at Instagram and LinkedIn. That’s a thin entity graph — AI engines can’t disambiguate “Mainsail Greenville” from a dozen other Mainsails (a marketing agency in Florida, a private equity firm, a sailing supply company) because the cross-references aren’t there.
I dug up the Google Business Profile CID URL — turns out it’s cid=4906161962868211346 — and added it to the schema. Same for the kgmid URL. Now the schema explicitly tells crawlers: “this entity is also at this Google Maps listing, also at this Knowledge Graph node.” That’s the disambiguation handshake.
The schema also gained slots for Bing Places, Wikidata, Yelp, BBB, Crunchbase, Clutch.co, TheManifest, and Apple Business Connect. They’re empty for now — those profiles still need to be claimed/created. But the schema scaffolding fills them in automatically once the values get pasted.
3. Person schema for Max got a lot deeper.
The Person schema for me (the founder) used to have just name, jobTitle, and a LinkedIn link. Now it has:
- A real headshot (the
Photo coming soonplaceholder is gone — the file was always in the build, the Astro markup just had a silent fallback that hid it) homeLocationset to Greenville, NCknowsAboutlisting the technical specifics — Astro, Cloudflare Workers, Tailwind, schema markupsubjectOfreferencing the journal posts I’ve authored, so AI engines can see I have published thought leadership on the topics I claim expertise in
The reason this matters: AI engines weight authorship heavily. A site with named, credentialed, traceable authorship gets cited more than one with “Admin” or generic-team bylines. The schema is how machines verify the claim.
4. Five dedicated service pages shipped.
Until this week, /services was a single overview page covering web design, local SEO, GBP, AI search, and ads as sections on one URL. That was fine for a lookbook but bad for SEO — five different commercial intents competing for placement on one page meant none of them ranked.
Each service now has its own page at /services/[slug] with the full 14-element template the playbook recommends — direct-answer paragraph, deliverables, process, real-job proof, FAQ with FAQPage schema, author byline, internal links. Each page targets one primary keyword: local SEO Greenville NC, web design Greenville NC, etc.
Worth noting: I wrote each page with unique content and unique section ordering. None of them are template clones with the city name swapped. The playbook is firm about that — Google’s scaled-content-abuse classifier got teeth in March 2024 and is more aggressive every quarter. Five pages built well > fifty pages built sloppy.
5. Industries pages now show Google’s trust badges per vertical.
If you’re an HVAC company or plumber, you qualify for Google Guarantee — the green check next to your business in Local Services Ads. If you’re a real-estate agent, you qualify for Google Screened (blue check). Most other verticals don’t qualify for either. The new section on each industry page is honest about this — eligible verticals get the badge details and a path to apply; non-eligible verticals get a plain “you don’t qualify, here’s what to focus on instead.”
6. AI visibility tracker is set up.
The whole point of this journal series is to document the climb. So I built a 30-prompt master tracker — six categories of prompts (category, branded, educational, neighborhood, intent-shifted) × six AI engines (ChatGPT, Perplexity, Google AI Overviews, Claude, Gemini, Copilot). Lives in a CSV at tracking/ai-visibility/; I’ll run it monthly and the deltas will be the source data for these posts.
The next step is running the baseline check — actually pasting all 30 prompts into all 6 engines and recording who got cited and who didn’t. I’ll publish the baseline numbers in the next post.
What I haven’t done yet
This is the longer list, and the more honest one.
Wikidata Q-ID. This is the single biggest AI-entity signal available — every major model trains on Wikidata, and Wikidata cross-links your entity to LinkedIn, GBP, BBB, all the directory citations. I’d love to have one already. But Wikidata’s notability rule requires three or more independent external sources, and a fifteen-day-old domain with no press placements doesn’t have those yet. So Wikidata is on hold until the Greenville Chamber of Commerce listing, the Pitt County Chamber listing, and a Clutch.co agency profile all land. Self-citing from domains I own would technically check the box but would also get the entry deleted as non-independent — playbook is clear on this.
Bing Places listing URL. Bing Webmaster Tools is verified. The actual Bing Places listing is not yet public-resolvable — there’s a verification step in the dashboard I haven’t completed. Pulling the URL out is on me this week.
The Cloudflare Analytics token, the Microsoft Clarity project ID, the Google Search Console verification meta tag. All three are wired into the codebase — empty strings disable the script tags, real values enable them. I just need to log into each console, copy the value, paste it. It’s a five-minute job that I haven’t done because the marginal data each one captures isn’t worth context-switching mid-build for.
The GBP listing rename hasn’t fully propagated. The business is named “Mainsail” in the Knowledge Panel and the listing itself, but Google’s URL parameters still show the legacy “greenville-seo-design” name in some referer/search-results contexts. That’s a Google-side propagation delay, not something I can hurry.
The first quarterly digital PR campaign. Mainsail has the prospect-research data to write a credible “State of Local SEO in Eastern NC” data asset — we’ve scraped backlinks for every local agency, audited 200+ Greenville businesses, and have the numbers. Turning that into a pitch-ready PDF and sending it to thirty regional publications is a 6-8 hour project I haven’t scheduled yet. Targeting Q3 2026 for the first one.
Why this matters for any small business reading
If you’re an Eastern NC owner who has wondered why your Wix site doesn’t show up in ChatGPT, or why your competitor with worse work outranks you on “[your service] near me” — almost everything I’m doing here is the same thing I’d do for you. The mechanics aren’t proprietary. The discipline is.
The reason I’m publishing this is partly accountability (if I claim AI search optimization is a real service, my own site has to pass the test eventually) and partly because the path is interesting. Most SEO content is written from the finish line. Watching someone climb from zero — including the parts where they admit the work isn’t done — is more useful than another agency case study about a client we can’t name.
What’s coming in month 2
In thirty days I’ll publish the next update with:
- Baseline citation-rate numbers. All 30 prompts × 6 engines, run, recorded, and published as the floor we’re climbing from.
- Movement, if any. New domains rarely move in 30 days. We’ll see.
- Three external citations live. Greenville Chamber, Pitt County Chamber, and Clutch.co — the three that unblock Wikidata.
- Honest assessment of what didn’t work. This part is the one nobody else publishes. I’ll include it.
Same time, same place, in 30 days.
— Max