Content & SEO · August 28, 2026

We ran a content engine for 90 days. It produced zero customers.

126,154 search impressions. 851 clicks. 313 sessions. Zero bookings. This was our own bridal studio, our own pipeline, and our own build. Here is what we found when we finally joined the traffic to the money.

What we built

Ira’s Bridal Studio is ours. We built it an automated blog pipeline: posts written and published on a schedule, with safety gates around publishing, and no human touching any of it. It worked. It ran unattended for months and shipped on time.

Judged as engineering, it was a success. Judged as a business system, it was a failure, and it took joining two datasets nobody normally joins to find that out.

The 90 day numbers, in order

126,154 impressions. That is a real number and it looks like a win. It is the number a content report leads with.

851 clicks. The program posts averaged position 9.3 with a 0.31% click-through rate. Position 9.3 is the bottom of page one, which is where content goes to be technically ranking and functionally invisible.

313 sessions. Roughly a third of the clicks did not become a measured session.

Zero bookings. Not a low number. Zero. In the same 90 day window the site as a whole did produce sales, so the tracking was alive and the funnel could record a booking when one happened. The zero was real, not a measurement gap. We checked that specifically, because “it must be a tracking problem” is the comfortable answer and it was available to us.

The best post was the worst post

One post earned 544 of the 851 clicks. Nearly two thirds of all traffic from a single article. In any content dashboard that is the star performer, the template to copy, the proof the program works.

It ranked for “vera wang” — a designer the store does not carry.

Every one of those 544 people was searching for a product we cannot sell them. The traffic was not underperforming. It was structurally incapable of converting. No headline test, no call to action, no retargeting was going to fix a mismatch between what the visitor wanted and what the business sells. The winner was the clearest evidence the program was broken, and it was sitting at the top of the report the whole time looking like proof it was working.

The local content did worse

The obvious counter-argument is that we wrote the wrong posts — too national, not enough local intent. So we checked the local-intent content specifically: 2,940 local impressions produced 1 click.

One. The theory that we just needed to aim the same machine at better topics did not survive contact with its own data.

What we did about it

We stopped writing posts. Not paused, not reduced cadence — stopped, and moved the effort somewhere the same 90 days of evidence pointed.

The product catalog had a rendering problem. 139 product pages were serving crawlers roughly 105 characters each — a near-empty shell — and had earned zero search impressions between them. Real inventory, real demand, invisible pages. We fixed server-side rendering so a crawler receives the full product page, and we wired the internal links so those pages could actually be reached.

The first pages hit page one within 48 hours. No new writing. The demand had been there the entire time, pointed at pages we had made unreadable, while we ran a content engine chasing demand that did not exist.

Why vanity metrics survive

126,154 impressions is not a fake number. Nobody falsified anything. The metric survived because nobody joined the analytics to the money. Search data lives in one tool, sessions in another, bookings in a third. Each one, read alone, told a defensible story. Only the join produced the sentence that mattered: this program has produced no customers.

That join is boring work and nobody is incentivized to do it, least of all the person who built the thing being measured. We built this pipeline. We were proud of it. Killing it cost us something.

Impressions are not demand. Traffic is not intent. Ranking is not selling. The actual skill here is not writing content or building the pipeline — both were the easy part. The skill is being willing to measure your own project honestly, and then shut it down when the number comes back zero.

What to check on your own systems

  • Join your content data to your customer data. Pick your last 90 days of blog traffic and ask how many of those people became customers. If nobody in your organization can run that query, that is the finding.
  • Look up what your top post actually ranks for. Read the queries, not the click count. If the query names a product, service, or brand you do not offer, that traffic can never convert no matter what you do to the page.
  • When you see a zero, prove it is real before you dismiss it. Confirm the same funnel recorded conversions from another source in the same window. If it did, the zero is a result, not a bug.
  • Check position and click-through together. Position 9.3 at 0.31% means you are collecting impressions nobody clicks. Impressions at that depth are not a leading indicator of anything.
  • Before writing anything new, verify your existing money pages are readable. Fetch a product or service page without JavaScript. If it comes back nearly empty, fix that first. It is cheaper and it works faster.

Why we publish our own failures

We could have written this post about a client, anonymized, at a safe distance. Instead: we built it, we ran it for 90 days, it returned nothing, and we killed it. Owning the whole stack is what let us ask the question. Being willing to hear the answer is the part that is actually hard.

Read what we found in the catalog instead

Is your content program producing customers or impressions?

Book a build consult