Illustrative case study

A fictional business. The figures are a modelled scenario, not a client result.

← Case studiesOrder FK-31-6Hospitality & Food · UK & Ireland

Fryline Kitchens

Multi-brand delivery kitchen operator · Manchester

How a delivery-kitchen operator fixed 1,100 broken location pages across 6 brands

Headline8 months

Location pages indexed

18%to91%

Indexed location pages 18% → 91%

Service

Baseline

Location pages indexed

18% · 201 of 1,116

Tickets bumped

0/12

Grill

On order · diagnosing
  • #103Crawl budget

    Prune ?brand=&sort= facets

    26:00

    61k parameter URLs → noindex + robots pattern

  • #104Crawl budget

    Split sitemaps by brand

    30:00

    6 sitemaps, true lastmod, no 3xx or 404 entries

  • #105Programmatic location pages

    Rebuild location template

    44:00

    Hours, delivery radius, brand menu, ETA — unique per kitchen

  • #106Internal linking

    City hubs → kitchen spokes

    48:00

    9 city hubs linking every live kitchen page in 2 clicks

+ 6 more on the rail

Fry

Cooking · building the fix
  • #101Programmatic location pages

    Kill soft-404 shells

    22:00

    412 brand × area pages with no menu → real content or 410

  • #102Programmatic location pages

    Fix cross-city canonicals

    14:00

    238 Salford, Stockport & Bury pages pointed at /manchester

Pass

Shipped · awaiting recrawl
  • Station clear
Bumpednothing yet — the rush is on

Rail clock: 10:00 on a ticket = one month of work. Modelled scenario.

01The rush

Six virtual brands across 31 kitchens had produced over 1,100 templated location pages. Most were soft-404s or canonicalised to the wrong city, so Google indexed less than a fifth of them.

Fryline Kitchens runs 6 delivery-only brands out of 31 dark kitchens across Greater Manchester and the North. Each brand had a page for every area it might deliver to — 1,116 in all — generated from one template that knew nothing about which kitchen actually served the area.

When no kitchen was in range the page still returned 200 with “no kitchens near you”. Satellite towns inherited a canonical to /manchester. Google treated most of the estate as duplicates or soft-404s, and orders went to aggregator apps that charged up to 30% commission.

Brands
6
Kitchens
31
Location pages
1,116
Indexed at start
201
Crisp Theory · Bao Down · Smash Club · Green Fork · Wing Shift · Late Loaf

02Audit check

What the printer said on day one.

Fryline Kitchens

Technical audit · 1,116 URLs

  • IndexLocation pages submitted1,116
  • IndexIndexed (Search Console)201
  • IndexSoft-404: 'no kitchens near you' shells412
  • IndexCanonical → wrong city238
  • CrawlParameter URLs crawled / month61,300
  • CrawlGooglebot hits on location pages14%
  • CrawlSitemap entries returning 3xx/4041,870
  • LinksLocation pages with 0 internal links533
  • LinksMedian click depth from home7
  • SpeedINP p75, mobile, menu pages410ms
  • SpeedMenu JS shipped on first load1.3MB
  • LocalPages with opening hours in HTML0
Pages earning orders18%

Search: “fried chicken delivery salford”

Before

fryline.co.uk › crisp-theory › salford

Crisp Theory Salford | Fryline

Sorry — there are no kitchens near you right now. Try another postcode…

Soft-404 · canonical → /manchester · not indexed

After

fryline.co.uk › crisp-theory › salford

Crisp Theory Fried Chicken Delivery in Salford · Open till 2am

Delivered from our Ordsall kitchen in ~25 min. Wings, tenders & loaded fries. Order direct, no app fees.

Indexed · position 2 · Restaurant schema

The diagnosis was not “more content”. It was plumbing: the estate told Google 1,116 times that a page existed, then gave it nothing to index, the wrong canonical, or no link to find it by — and the few pages that did rank answered a tap in 410ms.

03The line

Four stations, one ticket at a time.

Built on our Signal plan (technical seo): fix what Google can crawl and trust before writing a word more.

  1. Station 01 · Grill

    Programmatic location pages

    Every brand × delivery-area page now earns its URL. The template pulls the real kitchen behind each area — opening hours, delivery radius, ETA and that brand's live menu — server-rendered so Googlebot sees it on first byte. Combinations with no kitchen in range return 410 instead of a "no kitchens near you" shell.

  2. Station 02 · Fry

    Crawl budget

    61,000 filter and sort URLs were eating 86% of Googlebot's visits. Parameters were noindexed and pattern-blocked, sitemaps split into six per-brand files with honest lastmod dates, and a weekly log-file watch alerts if any template loses crawl share.

  3. Station 03 · Pass

    Internal linking

    Nine city hubs link to every live kitchen page within two clicks, breadcrumbs carry brand → city → area, and each page links to four adjacent areas. Orphan location pages fell from 533 to 11, and click depth from seven to two.

  4. Station 04 · Expo

    Core Web Vitals

    The menu used to hydrate as one 1.3MB bundle, so the first tap on “Add” stalled. Menu sections became islands, the basket widget and seven tags moved off the input path, and INP at p75 fell from 410ms to 160ms.

048 services

Month by month on the rail.

  1. Month 0124% idx

    Mise en place

    Crawl of all 1,116 URLs, 90 days of log files, Search Console page reports split by brand. Canonical fix shipped in week 3.

  2. Month 0237% idx

    Clear the shells

    412 soft-404 shells triaged: 348 gained a real kitchen + menu, 64 empty combos returned 410. Parameter facets blocked.

  3. Month 0351% idx

    New template on the line

    Location template rebuilt with server-rendered hours, delivery radius and brand menu. Six per-brand sitemaps live.

  4. Month 0463% idx

    Hubs and spokes

    Nine city hubs launched; median click depth falls from 7 to 2. Indexation passes 60%.

  5. Month 0572% idx

    Fix the input lag

    Menu islands ship; basket widget and tags deferred. INP p75 drops under the 200ms ‘good’ line for the first time.

  6. Month 0681% idx

    Neighbourhood links

    Breadcrumbs and adjacent-area links on every page; orphan pages fall from 533 to 11.

  7. Month 0787% idx

    Structured kitchens

    Restaurant schema per kitchen and brand; log-file watch alerts on any template losing crawl share.

  8. Month 0891% idx

    Board clear

    91% of location pages indexed; QA reports per brand handed to the in-house team as a weekly ritual.

05Service report

The board, cleared.

Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.

Location pages indexed

18% → 91%

0%25%50%75%100%BASEM1M2M3M4M5M6M7M891%18%

Crawl errors

-87%

B123456789,4001,222

Organic order clicks

+204%

baseline 3,100/mo9,424

INP (p75)

410ms → 160ms

410
160
0200 good500 poor600ms

Rankings · Google UK, mobile, month 8

QueryLanding pageBeforeAfter
fried chicken delivery salford/crisp-theory/salfordnot indexed#2
bao delivery manchester/bao-down/manchester34#3
smash burger stockport/smash-club/stockportnot indexed#4
late night food delivery bury/late-loaf/bury61#5
vegan delivery chorlton/green-fork/chorltonnot indexed#3
wings near me didsbury/wing-shift/didsbury48#6
burger delivery oldham/smash-club/oldhamnot indexed#7
fried chicken open now leeds/crisp-theory/leeds72#8

Order up

Get a plan like this

Hundreds of templated pages, little of it indexed? Signal starts with the crawl, the canonicals and the links — then the speed.

← Back to all case studies