An August 2026 audit found the add-to-quote button had never drawn on my family's storefront catalogue pages, so nobody could ask for a price.
The audit was meant to be about photographs
I opened my family's trophy and awards storefront in August 2026 to fix catalogue photographs and category labels. That was the whole brief. The business prices every job by hand, so the site carries no shelf prices and no minimum order. A customer browses, adds items to a quote basket, submits the basket, and someone on the business side prices the work and replies by email or message. The site does one job. It captures the request and hands it over. If that path is broken, the site is a picture gallery.
A button that was never on the page
The add-to-quote control on an individual product page worked. The version of it that belongs on the catalogue grid, the page a person actually lands on from a search or an ad, never drew at all. The grid is rendered by a page-builder plugin that never calls the theme hook the button hangs on. The code for the button existed. It was installed and it was correct. It had nowhere to appear.
So a visitor who reached a category page saw rows of products and no way to ask about any of them. This had been true for as long as that grid had been in place. I had assumed the control was on the page because the code for the control was in the repository, which is a bad habit and the reason I now open the page instead of the file.
What the audit checked
| What the audit checked | What it found | When |
|---|---|---|
| Whether the add-to-quote control drew on catalogue grid pages | It never drew. The grid plugin bypasses the hook the button hangs on | August 2026 |
| Whether quote basket submissions were reaching the ad account | 0 over 30 days, with the tag correct and connected | August 2026 |
| How many of the account's conversion actions carried any meaning | 18 enabled, 4 of them meaningful | August 2026 |
| Whether the basket page held what a visitor had added | It did not. A shared cache served one stored copy to every visitor | Fixed 4 September 2026 |
| Whether any of this was a tracking problem | The tracking was right. The path underneath it was broken | August 2026 |
Why nothing upstream said a word
The advertising account had a conversion action named for quote basket submissions. It recorded zero over thirty days. The tag was correct and connected, and Google's own side verified it. That is the part worth sitting with. A zero arriving through a healthy tag reads exactly like weak demand. It had been reading that way for months, and the honest reading of weak demand is that the market does not want the thing, which is a conclusion that stops people from looking any further.
The account made that easier. Eighteen conversion actions were enabled, and four of them carried any meaning. Three were goals for an analytics product that stopped collecting data in 2023. Five belonged to a campaign type the account does not run. Most of what the dashboard reported was map interactions from the business listing, which look like engagement and are nothing of the sort. A dashboard full of moving numbers is very good at hiding one number that never moves.
The second break, further down the same path
Fixing the grid button exposed the next thing. The quote basket page itself was being served out of a shared caching layer, so every visitor received one stored copy of that page, and the stored copy was empty. A customer could add six items, click through, and see an empty basket with no explanation. That was fixed on 4 September 2026.
Advertising had been running into that path for three months. Every paid click that made it as far as the basket was thrown away at the site, after the ad had done its job. It also meant the account had no clean conversion history to bid on, so the obvious next move, letting the platform optimise toward conversions, would have been training on noise.
What actually changed for a customer
Before the fix, a person who found the storefront through a search and wanted to know what three plaques would cost had no route to ask except to find a phone number or a messaging link and start a conversation from scratch. The thing the site was built to do, collect a multi-item request with the item codes attached and put it in front of someone who could price it, was unavailable to every visitor who tried it. Afterwards the button is on the grid and the basket holds what a person put in it, so a request arrives with its line items intact. No new capability was built. The capability had been paid for and shipped some time earlier, and it had never once been reachable.
If you run a storefront, do this tomorrow: open your own site in a private window, as a stranger with no session and no admin bar, and complete the single action your business depends on, from the page your traffic actually lands on, all the way to the confirmation.