This is a post we did not plan to write. We are writing it because hiding what happened would be worse than publishing it. Most agencies bury their mistakes. We are going to walk through ours in detail, because if you are optimising for AI search citations in 2026, the lesson is worth the embarrassment.
On May 30, 2026, our website was being cited about 50 times per day across ChatGPT, Perplexity, Google AI Overviews, and Microsoft Copilot. Our highest performing post (our AEO agency in Canada explainer) was driving roughly 70 of those citations on its own.
On May 31 the citation count dropped to zero. It stayed at zero. We had no idea why.
This post is the timeline, the diagnosis, and the lessons we now apply for every Canadian non-profit and association we work with on AI search visibility.
The setup
Some context for what we were doing before things broke.
Pragmatica is a 20 year old Canadian web design agency. We had been quietly publishing AI search optimisation content (AEO, GEO, all the acronyms) and watching the citations climb. The strategy was working. Microsoft Clarity's AI Visibility dashboard showed steady week over week growth.
Our highest performing post was a long form explainer on what AEO agencies in Canada actually do. It was getting cited by Perplexity for queries like "best AEO agency Canada" and by Microsoft Copilot for variations of "AEO services for Canadian businesses". Volume was modest but qualified. People landing on that page were actively looking for what we sell.
Then we decided to optimise the schema markup across the entire blog. This is where the trouble started.
The change
On May 30 we deployed a site wide JavaScript schema injector. The idea was efficient. Instead of building static schema markup into each blog post template, a JavaScript file would inject structured data (Article, Organization, BreadcrumbList) into the page after load. This way we could iterate on schema improvements without redeploying every blog post.
The script was called blogpostschemainjector v0.0.3. It worked in our testing. We verified it in Google's Rich Results Test. We saw the schema parsing correctly in browser dev tools. We pushed it to production at about 8:30 PM on May 30.
By the morning of May 31, the Microsoft Clarity AI Visibility dashboard was showing zero citations for the prior 24 hours. We assumed it was a dashboard lag. By June 1 the count was still zero. By June 2 we started to seriously worry.
The diagnosis
What we eventually figured out, in roughly the order we figured it out.
First hypothesis. The dashboard was broken. We tested by searching for our content on Perplexity directly. Our AEO post had been cited in roughly 6 out of 10 relevant searches the prior week. It was now cited in 0 out of 10. The dashboard was not broken. The citations were actually gone.
Second hypothesis. Something else had changed. We checked Google Search Console (organic search traffic was stable), Microsoft Bing Webmaster Tools (Bing crawl was happening but pages with the new schema were not showing the schema in Bing's view), and our deploy logs (the only change in the prior 72 hours was the schema injector).
Third hypothesis. The JavaScript schema injector was the cause. We dug into how Bing and Microsoft Copilot crawl pages. Microsoft's documentation is clear that their crawler executes JavaScript inconsistently. Server side rendered content is always seen. JavaScript injected content may or may not be seen depending on crawler scheduling, page complexity, and timeout behaviour.
Our static schema markup before May 30 was server side. The crawler always saw it. The schema injected by JavaScript after May 30 was probably not being seen by the Bing and Copilot crawlers. Without structured data confirming what each post was about, those crawlers stopped citing us.
We confirmed this by fetching a few of our blog post URLs with a server side fetcher that emulated the Bing crawler. The HTML response had no structured data. The JavaScript that would have added structured data never ran in the crawler's parsing.
The schema injector was the cause.
The fix
We pulled the schema injector off the site at 7:46 PM on June 4. Then we did something we should have done immediately. We rolled the entire site back to the May 30 backup, the last known good state before the schema deployment.
We waited. AI citations are a lagging signal. The crawlers needed time to re-index pages with their original server side schema. Recovery was not instant.
Within about 10 days, citation volume began to climb back toward the prior baseline. We are still monitoring whether the full pre crash citation level returns or whether we permanently lost ground.
Two side notes on the rollback. First, we lost some legitimate alt text and OG tag work that had been published in the same window. We had to redo it. The cost of getting clean diagnostic signal was worth it. Second, we resisted the temptation to deploy fixes piecemeal during the recovery period. Every additional change would have muddied the diagnostic signal further. Hold the line.
What we should have done differently
Three things, in retrospect.
We should have tested how Bing and Microsoft Copilot crawlers handle JavaScript schema before deploying site wide. Google handles JavaScript schema fairly well. Bing and Copilot do not. We knew this in the abstract. We did not apply it.
We should have deployed the change to a single post first and watched the citation behaviour for a week before rolling out site wide. Canary deploys are basic discipline. We skipped this because the change looked low risk in Google's Rich Results Test.
We should have had a faster rollback plan. The diagnosis took five days. The rollback should have happened the morning of May 31 the moment we saw the citation count crash. Waiting to be sure cost us a week of additional citation absence.
What this means for AI search optimisation
A few takeaways that we now apply for every client doing AI search work.
JavaScript rendered schema is not equivalent to server rendered schema for AI search visibility. Google handles JS schema reasonably well. Bing and Microsoft Copilot do not reliably. Perplexity uses its own crawlers and the behaviour varies. If you care about being cited across AI search engines, your schema needs to be in the HTML at the moment of crawl.
Citation volume is a lagging signal. By the time you notice it has dropped, the damage has been done for days. If you are running experiments that could affect AI visibility, instrument them with a faster signal than weekly citation counts. We are now tracking schema validation on every blog post deploy through a CI pipeline.
Cash cow content is fragile. One technical change broke 75% of our citation volume because most of it came through one post. We are now diversifying the content base so a single page break does not collapse the whole AI search channel.
Mass deploys to production sites that depend on AI search visibility are risky. Stage changes, canary them, monitor citation recovery before rolling forward.
What we are doing now
The remediation work we are doing post crash, in order of priority.
Server side schema markup is back on every blog post. No JavaScript injection. The schema lives in the page template and is rendered at server time. Slightly less flexible. Significantly more reliable.
We are diversifying our high performing content. Instead of one post driving 75% of citations, we are building out several long form pieces in adjacent topics so that no single page break can collapse the channel.
We are running a daily citation visibility check across ChatGPT, Perplexity, Copilot, and Google AI Overviews using a defined set of test queries. Citation drops show up within 24 hours instead of within a week.
We are advising every Canadian non-profit and association client on the same lesson. If your AI search optimisation depends on JavaScript rendered content, you have a problem you may not know about yet.
This post itself is part of the recovery. Original first hand data and analysis is exactly the kind of content that gets cited by AI search engines, because nobody else is publishing it. We crashed our citations. Now we are publishing the post mortem and watching whether the post mortem itself rebuilds the channel.
Have questions or want to know more? Visit our service page dedicated to AEO and SEO




