TL;DR

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 checkedWhat it foundWhen
Whether the add-to-quote control drew on catalogue grid pagesIt never drew. The grid plugin bypasses the hook the button hangs onAugust 2026
Whether quote basket submissions were reaching the ad account0 over 30 days, with the tag correct and connectedAugust 2026
How many of the account's conversion actions carried any meaning18 enabled, 4 of them meaningfulAugust 2026
Whether the basket page held what a visitor had addedIt did not. A shared cache served one stored copy to every visitorFixed 4 September 2026
Whether any of this was a tracking problemThe tracking was right. The path underneath it was brokenAugust 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.