Local SEO & Google Business ProfileCitations, NAP consistency and local landing pages · Lesson 12 of 17
Local landing pages that aren't doorways
Video lecture
Local landing pages that aren't doorways
The narrated lecture is in production
Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.
Chapters
Transcript of the narration, chapter by chapter.
0:00 Local pages that aren't doorways
Here's a tactic that still gets sold to small businesses: we'll create a page for every town within fifty miles, and you'll rank everywhere. The pages look identical except for the town name. In this lecture you'll learn why that's a doorway page problem under Google's spam policies, what legitimate location and service area pages look like, and how to check whether your pages are too similar, with a short Python script.
0:31 Why it matters
Why does this matter? Your website supports local visibility in two ways. It reinforces relevance for your Business Profile, and it can rank in organic results for local queries. Location pages are your main tool. But city swap pages rarely rank, frustrate visitors, and at scale can harm how Google views your whole site. In the AI era, generating hundreds of them is easier than ever, which makes the risk bigger, not smaller.
1:03 Doorway abuse
Here's the definition. Google's spam policies describe doorway abuse as creating pages to rank for specific, similar queries that lead users to intermediate pages that aren't as useful as the final destination. Classic examples: hundreds of service in town pages with identical text except the town name, pages for areas you don't meaningfully serve, and pages that only exist to funnel users to one contact page. Mass produced versions can also fall under scaled content abuse.
1:36 The test
An analogy. Imagine a restaurant chain that prints a separate menu for every street in the city, each identical except for the street name at the top. Nobody's helped. Now imagine each real branch has its own page with its opening hours, its chef, photos of its dining room, its parking and its local specials. That's genuinely useful, because it's about a real place. That's the test: what on this page is genuinely about this place?
2:09 Location page essentials
So what does a legitimate location page include? One page per real branch, linked from that branch's profile. Exact NAP, a map, directions and parking or transport notes. Opening hours including special hours. The services offered at that location, the team there, and photos of that location. Genuine reviews from that branch's customers. Local details like landmarks, accessibility and languages spoken. And LocalBusiness schema with that location's details.
2:39 Service-area pages
And service area pages? Only create them where you can add genuinely area specific value. Projects completed in that area, with client permission. Area specific considerations, like older terraced houses in Salford often have a particular issue, or in Dubai's older villa communities, AC systems commonly need something specific. Local pricing or response times if they differ. Testimonials from customers in that area. If you can't write something meaningfully different, list the area on an areas we serve page instead.
3:14 Example 1 (simple)
Worked example one, simple. A dog groomer in Bristol has two real locations. She creates two location pages, each linked from its own profile, with photos of that salon, the groomers who work there, parking notes and reviews from that salon's customers. For nearby towns she visits with her mobile van, she lists them on one areas we serve page with the days she visits each. Simple, honest and helpful.
3:44 Example 2 (illustrative)
Worked example two, realistic and illustrative. A home cleaning company in London had a hundred and twenty near identical cleaners in borough pages. A similarity check shows most pairs share over eighty percent of their text. They consolidate into twelve area hub pages for zones they genuinely serve, each with team information, customer stories and area specific advice, and three oh one redirect the thin pages to the relevant hub. The site is easier to maintain, and the pages are far more useful to visitors.
4:21 The similarity check
How does the similarity check work? The script in the lesson fetches each page, strips navigation, headers and footers, and splits the text into overlapping five word chunks called shingles. Then it compares every pair of pages: shared chunks divided by all chunks. Pairs above a rough threshold get flagged as likely city swaps. Important: this isn't a Google metric, and there's no official threshold. It's a prompt to ask the key question. What on this page is genuinely about this place?
4:57 Test a page
Let's run the test on a real looking page. A plumbing company's Stockport page says: we provide plumbing services in Stockport. Our Stockport plumbers are experienced. Call us for Stockport plumbing today. What on this page is genuinely about Stockport? Only the word Stockport. Now imagine the rewrite: photos of three recent Stockport jobs with client permission, a note on the older housing stock in two named neighbourhoods and the pipework issues it causes, the engineer based nearby, typical response times, and reviews from Stockport customers. Same town. Completely different page.
5:37 Watch me do it: detect doorway pages
Watch me do it. A London cleaning company has sixty area pages and I want to know if they're doorways. First, I export the list of area page URLs from the sitemap into the Python script's list. Next, I run the similarity check. It fetches each page, strips navigation, header and footer, splits the text into five word shingles, and compares every pair. The output is long, so I sort by score. Most pairs score above eighty percent, and the highest is ninety four percent. That's two pages identical except for the borough name. Then I open two of them side by side and apply the test: what on this page is genuinely about this place? The honest answer is: the borough name in the heading, and nothing else. Now I plan the consolidation. I group boroughs into twelve zones the company genuinely serves with its own teams. For each zone, I brief a hub page: the team based there, customer stories with permission, photos from real jobs, and area specific advice, like the older housing stock in one zone. Then I map redirects from each thin page to its zone hub, and update the store locator so every hub has a crawlable text link. Finally, I rerun the similarity check on the new hub drafts before publishing.
7:12 AI + page systems
A word on AI. AI tools can help draft location pages, but only from real, location specific inputs: the branch's team, services actually offered there, photos taken there, directions, local projects and reviews. Generating hundreds of pages from a template and a town list is exactly what Google's doorway and scaled content policies describe. And make sure your store locator links to every location page with crawlable links, not only a JavaScript map.
7:44 Mistakes + recap
Common mistakes. City swap template pages. Location pages without real local content or photos. Store locators search engines can't crawl. And linking every profile to the home page instead of its location page. Recap: doorway abuse includes near identical pages created only to rank. Build rich pages for real branches, create area pages only where you add genuine local value, and check similarity before you publish. Try this now. Open two of your location or area pages side by side and list five things unique to each. If you can't, consolidate.
Why local pages exist
Your website supports local visibility in two ways: it reinforces relevance for your Business Profile (Google looks at your website as part of relevance and prominence), and it can rank in organic results for local queries. Local landing pages — location pages for each branch, or service-in-area pages — are the main tools.
The doorway page trap
Google's spam policies define doorway abuse as creating sites or pages to rank for specific, similar search queries that lead users to intermediate pages that are not as useful as the final destination. Classic examples:
- Hundreds of "[service] in [town]" pages with identical text except the town name.
- Pages for areas the business does not meaningfully serve.
- Pages that only exist to funnel users to a single contact page.
These pages often fail to rank, and at scale they can harm how Google views the site (and fall under scaled content abuse if mass-produced).
Two legitimate page types
1. Location pages (for real branches)
One page per physical location, linked from the GBP profile for that location. Include:
- Exact NAP, map embed, directions and parking/transport notes.
- Opening hours (including special hours).
- Services offered at that location, team members, photos of that location.
- Reviews or testimonials from that location's customers (genuine; review markup only where eligible).
- Local details: nearby landmarks, areas served from this branch, accessibility.
- Unique content: this is a page about a real place.
LocalBusinessschema with the location's details.
2. Service-area pages (for areas genuinely served)
For SABs or businesses serving multiple towns, create pages only where you can provide genuinely area-specific value:
- Projects completed in that area (case studies, photos, with client permission).
- Area-specific considerations (e.g. "Older terraced houses in Salford often have...", "In Dubai's older villa communities, AC systems commonly...").
- Local pricing or response times if they differ.
- Testimonials from customers in that area.
- Local team or depot information.
If you cannot write something meaningfully different about an area, you probably should not have a separate page for it; list it on a "Areas we serve" page instead.
A location page template
H1: Al Noor Dental Clinic — Jumeirah, Dubai
Intro: 2–3 sentences about this clinic, its team and specialisms
Key info block: address, phone, hours, directions button, parking notes
Services at this clinic: list linking to service pages
Meet the team: dentists at this location with short bios
Photos: reception, treatment rooms, exterior signage
Patient reviews: selected genuine reviews
Getting here: landmarks, metro/bus, parking
FAQs specific to this location (insurance accepted, languages spoken: Arabic, English, Urdu)
Map embed
Schema: Dentist (LocalBusiness subtype) with address, geo, hours, telephoneInternal linking and store locators
- A store locator or locations index should link to every location page with crawlable links (not only a JavaScript map that search engines cannot navigate).
- Link location pages to relevant service pages and vice versa.
- Include the locations index in the main navigation or footer.
Language and localisation
For bilingual markets, consider separate language versions of location pages (e.g. English and Arabic), implemented with hreflang (see the Technical SEO course). Use local phrasing and landmarks people actually use.
Measuring local pages
Track organic impressions and clicks per location page in Search Console, GBP-linked traffic via UTMs, calls and direction requests, and conversions. Pages that attract no impressions over months may be too thin or unnecessary.
Illustrative example
A home-cleaning company in London had 120 near-identical "cleaners in [borough]" pages. It consolidated them into 12 area hub pages for zones it genuinely serves, each with team information, customer stories and area-specific advice, and redirected the thin pages to the relevant hub. The consolidated pages were easier to maintain and more useful to visitors. (Illustrative scenario; outcomes vary.)
Hands-on: catch city-swap pages with a similarity check
Before publishing (or when auditing) a set of location or service-area pages, measure how similar they are. This Python script compares the visible text of each pair of pages using word shingles and flags pairs that are nearly identical:
import itertools
import re
import requests
from bs4 import BeautifulSoup
URLS = [
"https://www.example.com/areas/salford/",
"https://www.example.com/areas/stockport/",
"https://www.example.com/areas/trafford/",
]
def text(url: str) -> str:
r = requests.get(url, timeout=15, headers={"User-Agent": "page-similarity/1.0"})
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
for t in soup(["script", "style", "nav", "header", "footer"]):
t.decompose()
return " ".join(soup.get_text(" ").lower().split())
def shingles(s: str, k: int = 5) -> set:
words = re.findall(r"\w+", s)
return {" ".join(words[i:i + k]) for i in range(max(len(words) - k + 1, 1))}
pages = {u: shingles(text(u)) for u in URLS}
for a, b in itertools.combinations(URLS, 2):
inter, union = len(pages[a] & pages[b]), len(pages[a] | pages[b]) or 1
sim = inter / union
flag = " <-- likely city-swap" if sim > 0.6 else ""
print(f"{sim:.2f} {a} vs {b}{flag}")A high similarity score is not a Google metric, and there is no official threshold — it is a prompt to ask: what on this page is genuinely about this place? If the honest answer is "only the town name", consolidate.
AI-assisted drafting without doorways
AI tools can help draft location pages from a structured brief, but only from real, location-specific inputs: the branch's team, services actually offered there, photos taken there, directions, local projects with permission, and reviews from that branch's customers. Generating hundreds of area pages from a template and a town list is exactly the pattern Google's scaled content abuse and doorway policies describe. For page systems at scale, see Programmatic SEO and AI Content at Scale (programmatic-seo-and-ai-content-at-scale).
Common mistakes
- City-swap template pages.
- Location pages without real local content or photos.
- Store locators that search engines cannot crawl.
- Linking all GBP profiles to the home page instead of the location page (for multi-location businesses).
Key takeaways
- Doorway abuse includes near-identical city-swap pages created only to rank.
- Build location pages for real branches with unique, useful details and LocalBusiness schema.
- Create service-area pages only where you can add genuinely area-specific value; otherwise use one 'areas served' page.
- Make location pages reachable via crawlable store locators and link each GBP profile to its location page.
Check your understanding
Quick questions to lock in the lesson. They don’t count towards your certificate.
Put it into practice
Draft a location page for a real or fictional branch using the template, making sure at least five elements are unique to that location.
Enrol for free to save your progress
Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.