SEO and GEO in Practice: A Grocery Rebuild Case Study
Search has two audiences now. One is the ranking algorithm that decides which ten links to show. The other is the model writing the answer above them, which may never show your link at all.
This is a case study on a client where we could watch both — Danphe Stores, a Nepali and South Asian grocery shipping across Canada. We rebuilt their storefront from WooCommerce onto Next.js with Square as the source of truth for products and inventory, and it launched in early July 2026. Here is what the numbers did, what we think caused it, and the parts we can't prove.
The numbers
Google Search Console, 28 May – 26 August 2026:
| Metric | Value |
|---|---|
| Clicks | 3,490 |
| Impressions | 154,000 |
| Average CTR | 2.3% |
| Average position | 8.4 |
The shape matters more than the totals. Clicks ran around 20/day in early June and around 45/day by late August — roughly double. Impressions moved further, from about 500/day to about 2,500/day — roughly five times.
There is a visible step in the trend around 7 July, which is when the rebuild went live.
That's correlation, and we're naming the date so you can judge it yourself. We did not run a holdout. Seasonality, Google's own updates, and the client's other marketing all sit inside that window. What we can say is that the inflection lines up with the launch, and that the size of the impression move — 5× — is larger than the click move, which is exactly the signature of a site becoming eligible for far more queries rather than simply moving up on the ones it already had.
What the rebuild actually changed
None of this was SEO work in the sense of a checklist. It was a platform change that happened to fix the things search engines and language models both need.
Product pages became server-rendered HTML. The old stack put a lot of content behind client-side rendering. Every product page now arrives as complete HTML on first response — name, price, availability, description, category. A crawler gets the whole page without executing anything, and so does anything else fetching the URL.
Product data got a single source of truth. Square holds inventory for the physical store. The site now syncs from it rather than maintaining a parallel catalogue that drifts. Practically, this killed the two failure modes that quietly destroy grocery SEO: pages for items that no longer exist, and prices that disagree with reality.
Structured data stopped being decorative. Product with real price and availability, BreadcrumbList for category paths, Organization with service area. Because it's generated from the Square data rather than hand-maintained, it stays true — which is the only reason it's worth having.
The long tail became reachable. A grocery catalogue is thousands of specific nouns. People search for a specific brand of instant noodle, a specific lentil, a specific spice. Those queries have almost no competition and convert well. Serving them requires every product page to be fast, indexable, and honest about stock — which is what the 5× impression growth appears to be.
Where GEO diverges from SEO
Generative Engine Optimization — being cited by ChatGPT, Google's AI Overviews, Perplexity — overlaps heavily with technical SEO, and then diverges in a few specific ways worth knowing.
Overlapping: server-rendered HTML, clean structure, accurate structured data, fast responses. If you did these for search crawlers, you've already done most of the work. Nothing about GEO requires abandoning SEO practice.
Diverging:
- Models extract claims, not pages. A ranking algorithm decides which URL is most relevant. A model reads the content and pulls out a statement it can repeat. "Danphe Stores ships Nepali groceries from Vancouver across all of Canada" is an extractable claim. A hero image with the words in a graphic is not.
- Ambiguity is fatal in a way it isn't for ranking. Google can rank a page it only partly understands, using links and behaviour as signals. A model summarising an answer either finds a clear statement of what you sell and where you ship, or leaves you out of the sentence.
- Consistency across the web matters more. Models are assembling from multiple sources. If your site, your Google Business Profile, and directory listings disagree on your service area or hours, the model has no basis to prefer yours.
- Being the answer can cost the click. If the model answers "which stores ship Nepali groceries in Canada" without linking, you got the citation and not the visit. This is a real tension, and pretending it doesn't exist isn't useful.
The practical version: write the specific, checkable claims about your business into plain page text, keep them consistent everywhere, and let the structured data confirm them. That is nearly all of GEO that anyone can currently act on with confidence.
What we can't measure
We'd be inventing numbers if we claimed GEO attribution here, so we won't.
Search Console reports impressions and clicks from Google Search, including AI Overviews, but does not break out how often a page was used as an AI Overview source. ChatGPT and Perplexity citations don't appear in it at all. Referral traffic from those tools is small and partly invisible in analytics.
So: the click and impression numbers above are measured. The claim that the same work improves how models describe this business is reasoning from mechanism, not from data — the structure that makes a page extractable by a crawler is the structure that makes it extractable by a model. We believe it. We can't show you a chart of it, and neither can anyone selling you a GEO package right now.
What we haven't fixed
2.3% CTR at average position 8.4 is not good, and it's the obvious next job.
Position 8.4 means the average impression is on page one but near the bottom, where CTR is naturally low. But the two levers are clear: get the highest-impression pages higher, and make the titles and descriptions on the ones already showing worth clicking. A large share of those 154,000 impressions are long-tail product queries where a title that names the product exactly, with pack size and price context, will beat a generic one.
There is also a structural cause we can't fully solve: on some queries the answer now appears in the results page itself, and the click never happens even when the page is doing its job. This is why impressions rose faster than clicks, and it is going to be true for more of the web over time.
What transfers to other sites
Nothing here was exotic:
- Server-render the pages you want found. Everything else is downstream of a crawler getting complete HTML on the first request.
- Give product and inventory data one owner. Stale pages and wrong prices are an SEO problem long before they're a customer service problem.
- Generate structured data from that source, so it can't drift into lying.
- Write the claims you want repeated as plain sentences on the page — who you are, what you sell, where you serve.
- Judge the result on impressions first. Impression growth tells you eligibility improved. Clicks follow, more slowly, and CTR is a separate project.
Steps 1–3 are the same work whether you care about ranking or about being quoted. That convergence is the genuinely useful thing to know about GEO in 2026, and most of what's written about it is more complicated than it needs to be.
If you want a read on whether your own storefront is crawlable, extractable, and telling the truth about stock, that's the audit we'd start with. See how we approach AI-powered apps and search visibility, or get in touch.
Ready to build it? Let's talk about your project.
AI Apps & SEO →