Picture a Tuesday with a SaaS client that changes its offer every quarter. The ad account is open, the negative-keyword spreadsheet is open, and someone says, “Quick update on positioning.” This is a composite scene, not a transcript, built around a client I managed and a landing-page swap I found out about after it happened. By the time the update reaches the person managing search, the page can already be selling a different product from the ads.
Say the company spends $20k a month. The new offer comes with a new ideal customer, new pricing and a new headline, but the landing page keeps its URL. I can rebuild ad groups, rewrite ads and mine search terms for the language buyers now use. First I have to notice that the old promises are still running. Three months later, the offer changes again. That was a difficult account to keep aligned while I was watching it. Now imagine an AI engine describing the company from material it read before the latest change.
In the composite, the first pitch is team reporting for agencies. The next is a client portal for freelancers. Then time tracking arrives, and the pitch becomes something closer to Monday for small studios, except cheaper. Each revision looks tidy in its own announcement. Put the old ads, old feature pages and new hero headline side by side, though, and you have three companies sharing one name. A buyer has no reason to know which quarter they walked into.
The landing-page swap is the part that sticks with me. Someone on the client side changed a page without telling me. I had learned to check the page when an account stopped making sense, because the page and the ads were supposed to make the same promise. If they did not, changing bids would not repair the mismatch. It would just make the mismatch more expensive.
Google Ads at least gives you somewhere to look. Its ad quality system considers expected click-through rate, ad relevance and landing page experience in a 1-to-10 Quality Score; higher quality can earn better positions and lower prices, while lower quality pushes what you pay toward your max bid. A score is not an explanation of every account problem. It is a reason to open the page and read it against the ad. When the promise changed, the account had a way to complain.
I used to tell clients Quality Score was a vanity metric. I was wrong about its usefulness as an early warning for drift. The important question was less glamorous: does the page still say what the ads say? You can answer it before you touch a bid.
Now move the composite client forward. Its team rewrites the positioning in January, updates the hero and posts about the launch. In March, a buyer asks ChatGPT what the company does and which tool to pick. The answer describes an earlier offer in a calm, clean paragraph. The buyer never sees the new one. There is no Quality Score column for that answer, no obvious drop that sends me back to the page. The wrong description can sit there until somebody asks the buyer’s question.
Researchers call the problem LLM positioning lag: a model has learned an older version of a company, while old citations keep reinforcing it after the company changes. Disagreement between the site, social profiles, listings and third-party pages makes the lag harder to shake. With ads, I could inspect the keyword, the ad and the landing page together. With AI answers, the description appears somewhere else, assembled from material I may not control. The company keeps shipping new quarters. The answer can keep quoting an old one.
The examples are less obscure than a chaotic SaaS account. Hotjar continued to appear as an independent heatmap tool after the Contentsquare merger. Blue Apron answers omitted its pay-as-you-go pivot. Duolingo was still described as language-only after adding math, music and chess. A new announcement does not erase the old pages and lists an engine may encounter. That is the uncomfortable bit: a company can publish the truth and still be described by its history.
The test: ask as a buyer, then record the answer
I would run this as a prospective test, not a search for one embarrassing screenshot. The question fits on an index card: when a buyer asks for help, does the answer describe what you sell now or what you sold last year? Keep the setup small enough to repeat. A spreadsheet and an afternoon will do for a first pass.
- Write 15 buyer prompts in customers’ words, not marketing language. Skip “best SaaS client portal solution.” Try “tool to share reports with clients without email threads” or “cheap alternative to Monday for a five-person studio.” The working approach is 10 to 20 real buyer prompts, repeated monthly in fresh logged-out sessions. Include three to five competitors by name. An absence means more when you can see who appeared instead.
- Run the same prompts through ChatGPT, Perplexity, Gemini and AI Overviews in one sitting. Record the date and the conditions you can keep consistent. Answers can vary by session, region and model version, so do not quietly change the setup between checks. One 45-minute audit outline divides the work into prompts, four-engine testing, citation and accuracy logging, and fixes. It is a useful pace for a first pass, not a deadline the engines have agreed to meet.
- Log three distinct events: a mention names the brand; a citation links its site as a source; a recommendation suggests it for purchase. Those are separate measures, and they can move separately. Copy the description itself and note the other brands named for that prompt. Otherwise “we showed up” can conceal “we showed up as the product we stopped selling.”
- Score the description: current means the brand is named and described as it is now; wrong means it is named as an earlier version; absent means the answer gives the buyer a list without it. Keep citations in their own column. You need the words the engine used, not just a score, to work out what to fix.

I would expect noise, not a neat verdict after one sitting. In a 750-response audit across five engines, the same prompt returned a different brand list 38% of the time, and citation rates varied threefold on identical prompts. A weekly pattern is more useful than declaring victory because one answer changed. If your positioning has stayed stable for two years and your category has not moved, this may mostly confirm what you already know. For a company that rewrites its offer every quarter, that confirmation is worth checking rather than assuming.
Then take each wrong or absent answer back to the material a buyer or engine can find. Is there no page for that need? A page that mentions it but barely explains it? Strong content that still never gets cited? Those are the three useful gap categories in an AI visibility audit. Do not assign a cause because a spreadsheet cell is red. Open the cited sources when the answer provides them, read your own pages, and look for the old promise still sitting in plain sight.
A refresh has to change the information, not just the date at the top. One content-refresh analysis found that more than 70% of AI-cited pages had been updated in the previous 12 months and that cited pages were, on average, about a year fresher than ordinary organic results. That does not promise a citation for every edited page. It does make a quarterly offer change followed by no substantive page update a poor bet. A real FAQ, a comparison that answers the prompt, or a page that plainly explains the new offer gives the current version somewhere to live.
The old version has places to live, too. In the same multi-engine audit, Reddit accounted for 18.3% of cited domains and the brand’s own site for 7.4%. Its reported median time to citation for new pages was 16 days from Reddit answers, 21 from Medium and 34 from the brand’s own domain. Those figures belong to that audit, not every company. But they show why replacing a hero headline may leave an earlier description standing elsewhere. A forum post or old list does not get the positioning memo.
That is why I would start the repair by looking for contradictions. AI answers can draw inaccurate company information from forums, reviews and outdated pages. Check the sources an answer cites, then compare what they say with the current About, service, FAQ and pricing pages. The source-of-truth approach is plain enough: make those core pages agree and remove conflicting old copy you control. For my composite client, publishing a fourth positioning page while leaving three dead feature pages to tell the old story would be the lazy option. Every old promise left live gives the old answer another place to hide.

Back at the page that changed
If I had that account again, I would keep checking the relationship between the ads and the landing page. I would add the buyer-prompt sheet beside it. Same habit, different surface: read the promise the customer sees, compare it with the promise the company thinks it made, and do not call the work finished because a launch post went out.
The first pass can be manual. Repeating 15 to 20 prompts across four engines is where that spreadsheet gets heavy, particularly when answers vary by session, region and model version. That is where I would use groas rather than build a prettier log of my own: it brings tracked prompts, AI answers and citations, share of voice, and a content plan that drafts a missing page into the same workflow. It does not relieve me of deciding whether a description is wrong or whether an old page should go. It makes those decisions harder to lose under the next quarter’s launch.
For a repositioning, I would prepare the new page, revise the pricing language, deal with the old feature pages and give the buyer prompts a current answer to find. Then I would rerun the same prompts and see what moved. If the answers stay wrong, I have a specific description and, where available, a cited source to investigate. If they change, I know which promise the buyer is now seeing. Either result changes the next edit; neither is a reason to celebrate a dashboard.
That is the part of this client I keep returning to: the unchanged URL, the new headline, the ads still telling yesterday’s story. On the screen, the page looked ready for launch. In the other tab, the old promise was still running.

