04 SEO research · September 2026
Technical Audit
Sample report — anonymised from a real GroundWork engagement, September 2026. Client, competitor and legacy hostnames are replaced; every number is as researched.
- 96Pages crawled on client-site
- 36Pages still carrying the Webflow template name
- 0Canonical tags found site-wide
- 3Redirect hops on legacy-blog URLs
- 92.1Crawler on-page score out of 100
Summary
Six real problems, not four hundred warnings. The infrastructure is sound - valid SSL, HTTP/2, working sitemap and robots.txt, correct 404 handling, no crawl errors, and a respectable 92.1 on-page score. Nothing here is broken in the way that word usually means.
The problems are of a different kind. A third of the site is furniture.
The issues that matter
Ranked by impact. Everything cosmetic has been left out - see the final section for what was deliberately ignored and why.
Fix this week
-
Webflow template demo content is live and indexable
What it is: The site was built on a bought template called Startuper X. The template's own demo pages were never deleted. They are live, returning HTTP 200, listed in the sitemap, and several contain Lorem Ipsum placeholder text.
Affected URLs: 36 pages. The worst of them:
/product/sophisticated-sofa,/product/futura-chair,/product/armchair-and-pillow/category/sofas,/category/chairs,/category/armchairs/checkout,/paypal-checkout,/order-confirmation/career/head-of-brandingand five other invented job listings/utility-pages/sign-in,/create-account,/forgot-password,/email-confirmation/template-pages/styleguide,/licenses,/changelog,/start-here/extra-components/headers,/footers,/notification-bars/landing-pages/landing-page,/blog-pages/blog-v1
Why it costs rankings: Two reasons. Google builds its understanding of what a site is about from the whole site, and over a third of this one is about sofas, checkout flows and fictional branding vacancies. That is topical dilution on a site that has no topical authority to spare. Second, it wastes crawl budget on pages that will never rank for anything anyone wants.
Why it costs conversions: More directly than it costs rankings. Any of these surfacing in a branded search - or a prospect clicking through from a case study - sees a web development firm that could not finish its own website.
Exact change: In Webflow, delete the Products, Categories and Careers CMS collections and the template-pages, extra-components, landing-pages and utility-pages statics. Where deletion is not possible, set them to noindex and exclude from the sitemap. Verify the sitemap drops from 110 to roughly 74 URLs.
Time to fix: 2-3 hours. Mostly clicking Delete.
-
No canonical tags anywhere on the site
What it is: A canonical tag tells Google which URL is the real one when several show the same content. The site has none. Checked directly on four different page types - homepage, a service page, a blog category and a blog article - and the string "canonical" does not appear in the HTML of any of them.
Affected URLs: All 96 crawled pages.
Why it costs rankings: The crawler found 20 pages with duplicate content, 21 duplicate titles and 44 duplicate meta descriptions. The blog categories also generate paginated variants such as
/blog-category/news?ecd92464_page=2that serve the same wrapper. With no canonical, Google picks a preferred URL itself - and it does not always pick the one you would.A discrepancy worth noting: The crawler reports a canonical present on all 96 pages. Direct HTTP requests find none. The two disagree, and I have reported what I could verify myself. Resolve it in Google Search Console's URL Inspection tool before acting - it will show what Google actually sees.
Exact change: Webflow emits self-referencing canonicals when configured; check Site Settings → SEO and each page's settings. If the setting is on and the tag still is not rendering, that is a Webflow support ticket.
Time to fix: 30 minutes if it is a settings toggle. Longer if it is not.
-
Team pages served from template placeholder URLs
What it is: Four inherited team profiles are published at URLs named after the template's fictional demo staff, with the template name in the title tag.
Affected URLs:
team/[name-1]→ serves a team memberteam/[name-2]→ serves a team memberteam/[name-3]→ serves a team memberteam/[name-4]→ serves a team member
Why it costs: These are the pages that rank for a person's name, and named searches are how prospects check who they are dealing with after a meeting. One team member's page currently has a meta description reading "Lorem ipsum dolor sit amet consectetur adipiscing elit…" - which is what Google may display beneath their name.
Exact change: Re-slug each CMS item to the person's name, add 301s from the old slugs, and write a real meta description for each. The title template also needs changing from the inherited
[Name] - Startuper X - Webflow Ecommerce website templateto something like[Name] - [Role], the client.Time to fix: 1 hour for four pages.
Fix this month
-
Three-hop redirect chain on every legacy subdomain URL
What it is: The legacy-blog subdomains are legacy hosts that now redirect to client-site. The redirects work and are all permanent 301s, which is the important part - ranking equity does transfer. But each one takes three hops.
The actual chain:
301legacy-blog/why-your-data-isnt-working/301legacy-blog/why-your-data-isnt-working301client-site/why-your-data-isnt-working200client-site/blog/why-your-data-isnt-working
Hop one strips a trailing slash. Hop two swaps the host. Hop three rewrites the path. Each is a separate round trip.
Why it costs rankings: Google still shows the old legacy-blog URLs in results - both of the group's UK and NL rankings are attributed to the subdomain rather than to client-site. Long chains slow consolidation and Google gives up after around five hops. This one is within tolerance but has no margin, and the ranking signals are still sitting on the wrong host months after the move.
Exact change: Replace the chained rules with a single 301 mapping
legacy-blog/{slug}/straight toclient-site/blog/{slug}. Then submit the client-site blog URLs in Search Console to prompt re-indexing.Time to fix: 2 hours at the Cloudflare or Webflow redirect layer, plus a few weeks for Google to catch up.
Confidence: High on the chain itself - traced directly. Low confidence on how much equity has been lost, which needs Search Console data this report does not have.
-
Duplicate and placeholder metadata at scale
What it is: Across 96 pages: 44 duplicate meta descriptions, 21 duplicate titles, 20 duplicate-content flags, 20 descriptions the crawler judged irrelevant to the page, and 12 irrelevant titles. Every blog and case study page has a bare date as its meta description - "2024-11-12", "09/12/2025".
Affected URLs: Site-wide. Two category pages also carry public spelling errors: "GloblizeMe" and "Solutins" on
/blog-category/case-studiesand/blog-category/news.Why it costs: Meta descriptions are not a ranking factor, but they are the sales copy in the search result. A date tells a searcher nothing and Google will write its own snippet instead, usually by grabbing the first sentence it finds. Duplicate titles across 21 pages genuinely do cost rankings by making pages compete with each other.
Exact change: Set the blog CMS description field to pull from an excerpt rather than the publish date. De-duplicate the 21 titles, starting with the seven service pages, which currently share one generic company description between them. Fix the two typos.
Time to fix: Half a day for the CMS template change, then ongoing as articles are written.
-
Service pages have no H1 and almost no content
What it is: Seven pages have no H1 heading at all, and 53 of 96 are flagged for low content rate. The overlap is the commercial pages: six of seven service pages have no H1, and the seventh's H1 reads "The tech stuff".
Affected URLs: All of
/services/*, plus/contact.Why it costs rankings: These are the only pages on the site that can convert a visitor, and they carry between 168 and 434 words with no heading structure telling Google what they are about. This is the root cause behind the zero rankings in Prompt 1.
Exact change: Covered in detail in the Site Explorer report - it is a content problem rather than a technical one, so it is listed here for completeness rather than re-argued.
Time to fix: 2-3 days of writing, per the Prompt 1 priorities.
Fix eventually
| Issue | Pages | Why it is not urgent | Severity |
|---|---|---|---|
| No alt text on any image | 96 | Real accessibility and image-search cost, but with no rankings to protect it changes nothing this quarter. Do it as pages get rewritten. | Low |
| Render-blocking resources | 96 | Webflow's standard output. Only 7 pages actually load slowly, and largest contentful paint is acceptable on most. | Low |
| Slow-loading pages | 7 | Driven by uncompressed images - one case-study page ships 9.7 MB of imagery. Worth compressing, not worth a sprint. | Low |
| Sitemap lists 110 URLs, crawler reached 96 | ~14 | The gap is mostly the template pages in issue 1. Deleting those resolves most of this automatically - recheck afterwards rather than investigating now. | Low |
Things that look like problems but are not
Flagged by the crawler, deliberately excluded, with the reasoning.
| Flag | Pages | Why it was ignored |
|---|---|---|
| no_image_title | 96 | The image title attribute is not a ranking factor and is not read by most screen readers. Alt text matters; this does not. Ignore permanently. |
| canonicalization_status_code 403 | - | Cloudflare blocking the crawler's canonicalisation probe, not a site fault. A real browser is unaffected. |
| title_too_long / title_too_short | 37 | Length thresholds are arbitrary. A truncated title that reads well beats a padded one that hits a character count. The titles here have a relevance problem, not a length problem - covered in issue 5. |
| low_readability_rate | 3 | Two are case studies written for pharmaceutical and public-sector buyers. Dense prose is correct for that audience. |
| https_to_http_links | 1 | A single outbound link on the privacy page. Tidy it when convenient; it costs nothing. |
| seo_friendly_url_dynamic_check | 18 | These are Webflow's CMS pagination parameters. Normal, expected, and handled by fixing canonicals rather than by rewriting URLs. |
The single highest-impact fix
The 3 things I'd do first
-
Delete the Products, Categories and Careers CMS collections and the template statics
Removes 36 pages including
/product/sophisticated-sofa,/checkout,/paypal-checkoutand six invented job listings. Confirm the sitemap drops from 110 to around 74 URLs, then resubmit it in Search Console.An afternoon, zero risk, and it removes the only finding in this audit that would embarrass anyone in a meeting.
-
Re-slug the four team pages and rewrite their titles
team/[name-1]currently serves a team member with a Lorem Ipsum meta description and the template name in the title. Re-slug to the real names, 301 the old URLs, and replace the inherited title pattern.An hour. These are the pages that show up when someone checks who they just met.
-
Establish whether canonical tags are actually rendering
Direct requests find none; the crawler claims all 96 pages have them. Open Google Search Console's URL Inspection on
client-site/blog/why-your-data-isnt-workingand read the declared canonical.Twenty minutes to check, and it determines whether issue 2 is a settings toggle or a Webflow support ticket. With 20 duplicate-content pages on the site, it is worth knowing which.