All postsTech

A Client Paid 3 Agencies for SEO Before Me. None of Them Opened the Website Code.

You have probably seen the report. The one that lands in your inbox on the first of every month. Green arrows, a keyword tracker, a line about "domain...

Garvit Sharma

Garvit Sharma

21 June 2026 · 7 MIN READ

Tech

A Client Paid 3 Agencies for SEO Before Me. None of Them Opened the Website Code.

webight.com
On this page

You have probably seen the report. The one that lands in your inbox on the first of every month. Green arrows, a keyword tracker, a line about "domain authority climbing steadily," a screenshot of Google Search Console with a few impressions circled in red.

Looks like work. Feels like progress. Your rankings have not moved in a year.

A client came to me earlier this year after running through three different SEO agencies. Three. He had a folder of monthly PDF reports going back almost two years. Beautiful documents. Charts, recommendations, "next month we will focus on content velocity." And his site sat on page three for the one keyword his business actually lived or died on.

I asked him one question before I quoted anything. "Can I look at the page source?" He said sure, nobody had ever asked him that. That sentence told me everything.

What I found in the first ten minutes

I opened his homepage, hit view source, and searched for the <title> tag. It read: "Home | [his company name]". The default. The thing the website builder auto-filled the day the site went live.

Two years. Three agencies. Thousands of rupees a month. And the single most important on-page ranking signal, the one piece of text Google shows as the blue clickable link in the results, had never been touched.

The meta description was empty. Not bad. Empty. So Google was scraping a random sentence from his footer and showing that as the preview. His H1 said "Welcome". His product pages all shared the same title tag, which means Google had no idea which page to rank for which term, so it ranked none of them well.

None of this was in any report. The reports talked about backlinks and "authority". Nobody had opened the code, because opening the code means you have to actually change the code, and changing code on a live site is the part most SEO retainers quietly avoid.

Report-only SEO vs code-level SEO

Here is the split, because once you see it you cannot unsee it.

Report-only SEO is the business of producing evidence that work is happening. Keyword tracking tools, rank monitors, a Looker Studio dashboard, a monthly call where someone reads the dashboard back to you. The deliverable is the report. The report is the product.

Code-level SEO is the business of changing what Google's crawler reads when it hits your site. Title tags, meta descriptions, heading structure, canonical tags, the sitemap, structured data, internal links, page speed, the rendered HTML. The deliverable is a faster, cleaner, more legible site. There is no pretty PDF because the proof is the site itself.

Both can charge the same monthly fee. Only one of them touches the thing that ranks.

I am not guessing about this from the outside. I run the same audit on my own site. In June I found my own canonical tags pointing to webight.com while my server was doing a 307 redirect to www.webight.com. I had 12 deleted case-study URLs still sitting in my sitemap, telling Google to crawl pages that returned nothing. My hero headline had a 4,190ms render delay on the largest element, caused by a framer-motion opacity animation that sat there waiting for hydration before it would paint. I rewrote it as a transform-only CSS animation and the render delay dropped to 382ms. I pulled two render-blocking stylesheets out with experimental.inlineCss in next.config.ts, killed two leftover third-party scripts, added security headers. My mobile scores went from 90/96/96/100 to 96/100/100/100.

That is what an hour inside the code looks like. You cannot find a 307 redirect breaking your canonicals by staring at a keyword tracker. You find it by reading the response headers.

What it actually takes to fix the title problem

The client's whole problem was that nobody would touch the files. So let me show you the thing three agencies somehow never did. This is a Next.js page, App Router. Static, per-page metadata. Copy-paste ready.

// app/products/wireless-earbuds/page.tsx
import type { Metadata } from "next";

export const metadata: Metadata = {
  title: "Wireless Earbuds with 40h Battery | AudioBrand",
  description:
    "Noise-cancelling wireless earbuds with 40 hours total playback, USB-C fast charge, and IPX5 sweat resistance. Free delivery across India.",
  alternates: {
    canonical: "https://www.audiobrand.com/products/wireless-earbuds",
  },
  openGraph: {
    title: "Wireless Earbuds with 40h Battery | AudioBrand",
    description:
      "40 hours of playback, USB-C fast charge, IPX5. Built for daily commutes.",
    url: "https://www.audiobrand.com/products/wireless-earbuds",
    type: "website",
  },
};

export default function Page() {
  return (
    <main>
      <h1>Wireless Earbuds with 40-Hour Battery Life</h1>
      {/* product content */}
    </main>
  );
}

If the page is built on the fly from a database, you generate the same fields per record:

// app/products/[slug]/page.tsx
import type { Metadata } from "next";

export async function generateMetadata({
  params,
}: {
  params: { slug: string };
}): Promise<Metadata> {
  const product = await getProduct(params.slug);

  return {
    title: `${product.name} | AudioBrand`,
    description: product.shortDescription.slice(0, 155),
    alternates: {
      canonical: `https://www.audiobrand.com/products/${params.slug}`,
    },
  };
}

That is it. Every page gets a unique, descriptive title built from the thing it actually sells. Every page gets its own canonical pointing at the exact URL it should rank for. The crawler stops guessing.

This took me under an hour across his main pages. He had paid for two years of "SEO" and nobody had written these eight lines.

Why this happens, and why it keeps working as a business

There is a psychology principle underneath all of this called the proxy trap. When the real goal is hard to measure, people start measuring the easiest nearby thing instead, and then they chase the proxy until everyone forgets the real goal existed.

Ranking is hard to move and slow to show. A report is easy to produce and lands every month on schedule. So the report quietly becomes the goal. The agency feels productive making it, the client feels safe receiving it, and the actual <title> tag stays default for two years because nobody in that loop is being measured on it.

It works as a business because most clients judge an SEO vendor on the wrong thing. They judge on "do I get my report on time and does it look thorough." They almost never judge on "did anyone open my code and change what Google reads." So the vendors that are good at reports win, and the vendors that are good at code do not get hired, because their output is invisible to a client who does not know where to look.

Five questions that expose this in one call

I did the fixes free for this client before quoting a retainer, same way I do most first jobs, because the work either speaks or it does not. But you should be able to catch this before you ever hire anyone. Ask these five on the first call and listen to how fast the answers come.

  1. "What does my homepage title tag currently say, exactly?" A code-level vendor will read it back to you or pull it up live. A report-only vendor will say they will "look into the on-page elements." They have not looked.

  2. "When you make a change, do you edit my site's files or send me a list of things to fix?" Sending you a list means you are the one doing the actual SEO. You are paying them to do your homework and hand it back to you.

  3. "Show me one canonical tag or meta description you have changed on my site." Not a backlink. Not a blog post. A line of code in my HTML. If they cannot point to one in two years, there isn't one.

  4. "What is my mobile LCP and what is causing it?" If they don't measure render delay, blocking scripts, and layout shift, they are not doing technical SEO. They are doing keyword astrology.

  5. "Is my sitemap clean, and how would you know?" The right answer mentions crawling it, checking for dead URLs and redirect chains. I had 12 dead URLs in my own sitemap and I build sites for a living. Everyone has them. Someone has to actually open the file.

Any vendor doing real work answers four of these in plain language without flinching. A vendor selling you a monthly PDF will reach for words like "authority" and "we will audit that" and steer you back toward the dashboard, because the dashboard is the only thing they actually own.

The part nobody says out loud

The reports were not lies. The keyword tracker was real, the impressions were real, the work logged in those PDFs probably happened. That is what makes this hard to catch. It is real activity pointed at the wrong layer. You can do honest, diligent, on-time work for two years and still never move a single ranking, because the layer that ranks is the one layer the work never reached.

So next time a report lands in your inbox with green arrows on it, do one thing before you read a word of it. Open your own homepage, right-click, view source, search for <title>, and read what it says. If that line was written by your website builder and not by a human who knows what you sell, you already have your answer about where the last year of money went. Go ask the five questions. Make them open the code on the call.

If you have run this view-source test on your own site and found something ugly, send it to me. I read every reply.

SEOtechnical SEONext.jsagenciesweb development
Next move

We build custom platforms, websites, and automation.

The two people who build it are the two you talk to, and every price is on the page.

Garvit Sharma

Garvit Sharma

Full-stack developer and co-founder of Webight, a two-person web and AI studio in India. He writes these from real client work. More about us.