The starting point

The client builds ADUs and remodels homes around the San Francisco Bay Area. Their site had 64 indexable pages, and our May 5, 2025 crawl showed 63 of them carrying a canonical tag that pointed at a different URL. Only one page named itself as the canonical version. Eleven pages pointed at a canonical that wasn’t indexable at all, and nine URLs returned 4xx errors.

That pattern usually comes from www and non-www versions, or slash and no-slash versions, disagreeing with each other. Google gets mixed signals about which URL to index, and the pages you want ranked can quietly drop out. In the 28 days to May 18, Search Console showed the site appearing for Bay Area remodeling and local ADU searches, but mostly at average positions between 60 and 95, with zero clicks.

What we did

  1. Crawl and baseline We crawled the full site on May 5 and saved the export, so every fix could be checked against a fixed starting point instead of memory.
  2. Fix canonical tags Working with our senior developer, we fixed the canonical tags so each indexable page points to itself.
  3. Pull search data for the next phase We exported 28 days of Search Console queries against the prior 28 days and paired them with search volume and difficulty for Bay Area remodeling and local ADU terms.
  4. Re-crawl and compare On May 18 we crawled again and ran a side-by-side comparison of both crawls to confirm what changed and what still needed work.

Delivered

  • Written proposal covering bug fixes and on-page SEO for up to 65 pages
  • Before and after crawl comparison, May 5 vs May 18, 2025
  • Self-referencing canonical tags on all 71 indexable pages
  • 4xx URL count down from 9 to 2 (the old broken URLs no longer appear; 2 new ones surfaced)
  • Search Console query export, last 28 days vs previous 28 days
  • Keyword list with volume, difficulty and intent for local remodeling and ADU searches

What changed

By the May 18 crawl, the canonical problem was gone. All 71 indexable pages pointed to themselves and no page pointed at a non-indexable canonical. That gives Google one clear URL per page, which is the floor any technical SEO work has to stand on.

The 4xx picture needs a caveat. The URL set changed a lot between crawls: 54 old HTML URLs no longer appeared and 68 new ones did. The 9 old broken URLs weren’t in the new crawl, and 2 new 4xx URLs surfaced that still need fixing.

Search Console moved in the same window, though we treat it as early signal only. In the 28 days to May 18, “bay area remodeling contractors” had 79 impressions at an average position of 62.92, against 11 impressions at 96.18 in the prior 28 days. Clicks were zero in both periods, so there’s no traffic gain to report yet.

What we’d point out

The re-crawl also surfaced new on-page issues that appeared between the two crawls. Titles over 60 characters rose from 1 to 49, duplicate titles from 0 to 16, duplicate H1s from 0 to 27 and meta descriptions over 155 characters from 1 to 53. The on-page phase needs to fix these, and we don’t count this window as a clean win.

Two weeks is a short window, and the Search Console period overlaps the fixes, so we can’t say the impression gains came from them. The rankings are still mostly past page five. Clean indexing makes the next steps measurable: rewriting titles and meta descriptions, tightening headings, and building local signals through local SEO.