Urgent.News

What's breaking now, across thousands of outlets.

Tech

Building Local Landing Pages That Are Not Doorway Pages (Next.js App Router)

If you've ever built a site for a local business, you've probably been asked for "a page for every city." The lazy version — one template with the city name swapped — is exactly what Google calls a doorway page, and it tends to get ignored or demoted. I recently built city pages for an AI receptionist product in Canada, and tried to make each one genuinely useful. Here's the approach, with…

Creating localized landing pages for businesses that aren’t just doorways requires careful planning and execution. When building a site for a local service, like an AI receptionist product in Canada, it’s crucial to focus on the unique information relevant to each city rather than simply swapping city names in a generic template. This approach helps avoid the pitfalls of Google’s doorway pages, which are ignored or demoted.

To distinguish between useful local pages and doorway pages, the data model must include real local details. This means exporting a list of cities, each with its own slug, city name, province, area codes, time zone, an introductory message, common problems, nearby cities, and frequently asked questions. For example, each city entry would specify its own area codes, time zone, specific local challenges, and questions commonly asked by residents.

A single dynamic route can be used to generate these pages statically. By mapping over the list of cities, you can create a route like `app/ai-receptionist/[city]/page.js`. This route generates static parameters for each city, allowing Next.js to create a unique page for every city in the dataset. The function `generateStaticParams` returns an array of objects containing the city slug, while `generateMetadata` uses this data to create SEO metadata for each page, ensuring that each page has a unique title, description, and canonical URL.

Structured data is also essential to match what’s displayed on the page and to accurately represent the business’s location. Each page should output a Service component with the `areaServed` property set to the city slug. The main service page, which acts as the parent topic, should also output a `LocalBusiness` component if the business has a physical presence in that city, including its address, hours, and Google Business Profile link.

Cities without a physical location should display truthful and honest wording about their service availability.

To further establish local credibility, include proof of being local on the main service page. This could be a block displaying the real phone number, operating hours, a link to the Google Business Profile, and a list of nearby towns served. Other cities should have more modest statements, such as “setup is done by phone or video,” to reflect their limited service area.

Linking the pages effectively helps search engines understand the relationships between the pages. The main service page should link to every city page, while each city page should link back to the main page and to other relevant city pages. Additionally, related pages like “local SEO for AI receptionists” or “web design tailored for Edmonton businesses” should link to the specific city page, using descriptive anchor text to guide users and search engines.

Keeping the number of cities to a manageable size—such as six well-detailed pages—often yields better results than creating sixty thin and generic pages. Each page should provide real value and answer specific questions that local users might have, ensuring that a local person finds the content useful. By following these guidelines—modeling local facts, using a single dynamic route, generating pages statically, matching structured data to the page content, and linking the pages appropriately—you can create high-quality, locally relevant landing pages that stand out from doorway pages and improve search engine visibility.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

MKBHD’s Duo Review

Marques Brownlee thinks the lack of Face ID will be the biggest gripe. I agree. And I love his central framing for the review: that the Duo is extremely polished around the edges (figuratively, but…

  • MKBHD reviews new Duo device
  • Absence of Face ID is major drawback
  • Best apps are iOS-specific

How to Turn a Written Brief into a Floor Plan Concept Without Opening CAD

Design briefs rarely arrive as drawings. They arrive as sentences: a family of four, a home office that actually gets used, a kitchen that opens to the living room but keeps the smells in.

  • Text-to-plan workflow transforms written briefs into visual concepts
  • Structure brief into Programme, Constraints, Relationships, and Tone sections
  • Use text-to-plan generator for multiple plan variations, not final designs

One Exchange's Order Book Lies: Merging 25 Exchanges (and Gold) into One

I kept getting stopped out by walls I couldn't see, so I merged 20 order books into one For a long time my routine looked like this: Binance order book in one tab, Bybit in another, OKX in a third…

  • Merging 25 exchanges' order books into one reveals hidden market barriers
  • Aggregated data shows price levels may be concentrated in few venues
  • Trader focuses on capital, liquidation clusters, and price barriers before trading

More from Saturday 24 October →