Free AI visibility report

Check if your company is visible in AI

See for free whether ChatGPT, Gemini and Google AI mention your company in their answers.

Check your visibility for free →

How to Rank Your Business in Multiple Cities: WordPress Location Pages for Google and AI Search

If your business serves more than one city, one page saying "we serve the whole country" won't cut it. People search locally, and both Google and AI tools want to show them something that actually belongs to their area. The good news: you can build that with WordPress, without hiring a developer.

This guide walks you through the whole thing, step by step. You'll plan a clean structure, write content that's genuinely different for each city, add the right signals, keep the pages fast, and then check whether AI tools are actually mentioning you.

TL;DR Ranking in multiple cities needs separate, genuinely different pages for each city, not one template with the city name swapped in. Google treats city pages that funnel users to a single page as "doorway abuse," and mass-generated pages without added value as "scaled content abuse." The local pack still holds strong, but AI Overviews now appear in most local searches and take clicks away from classic results. After reading this, you'll be able to build a /locations/ hierarchy in WordPress with unique content, LocalBusiness schema, and fast loading. Semly measures whether your city pages get mentioned and cited in AI answers. It doesn't build pages.

What WordPress location pages need to do for Google and AI search

Let's start with what you're actually aiming at, because Google and AI tools don't look for the same things.

Google's local results rest on three simple ideas: relevance, distance, and prominence. Relevance means your page matches what someone searched. Distance means how close you are to the searcher. Prominence means how well known you are, which comes from reviews, links, and mentions around the web. One important note: Google says there's no way to request or pay for a better local ranking. Anyone promising you a guaranteed spot is guessing.

The local pack (that map block with three businesses) and regular organic results are two different games. The local pack leans heavily on your Google Business Profile, reviews, and proximity. Organic results lean more on your page content, internal links, and inbound links.

Then there's AI search. AI Overviews now show up in most local queries, and they pull clicks away from the classic blue links. That makes AI visibility a separate goal you should track on its own.

Here's the short version of what each one cares about:

  • What counts for Google: a dedicated page per service, geographic relevance in your content, internal linking, reviews, and a consistent business name, address, and phone number (NAP).
  • What counts for AI: clear answers near the top of the page, consistent entity data across the web, and presence on trusted third-party sources. AI tools cite outside sources far more often than your own site, and a large share of citations come from the first part of a page.

So why doesn't one "we serve the whole country" page work? Because it gives Google and AI nothing local to grab onto. No city-specific proof, no local reviews, no local address. It's relevant to nobody in particular.

A word of caution: don't promise yourself guaranteed positions. You can control relevance and prominence. You can't control distance or how a model decides to answer.

Before you start: what you need and when this approach fits

Before you build anything, check that you have the basics. This saves you from creating pages you can't maintain.

Here's your checklist:

  • Access to your WordPress site, with permission to create pages or a custom post type.
  • A real address or a genuine service presence in each city. A virtual office with no real operation is a weak foundation.
  • Consistent NAP data for every location.
  • Photos that actually come from that city, not stock images reused everywhere.
  • Local reviews or testimonials you can quote.
  • One person responsible for the content of each city. This matters more than any plugin.

Now, when should you not go this route?

If you don't have a real presence in a city, skip it. One strong service page will serve you better than a thin city page. And if you're targeting dozens of cities without the resources to write something real for each one, don't mass-produce pages. That's exactly the pattern Google flags.

Ask yourself three questions: How many cities do I really serve? Do I have something to fill each page with? Who will keep it updated?

If you can't answer all three, scale back. Fewer, better pages win.

Step 1 — Plan your location page structure in WordPress

Build the skeleton before you write a word. A clean structure helps Google understand your site and keeps you far away from doorway territory.

Here are the steps:

  1. Create a hub page at /locations/. This is the parent that introduces your coverage and links to every city.
  2. Put each city under it, like /locations/chicago/. A subfolder keeps authority on one domain. A subdomain splits it, so avoid that.
  3. Choose between child pages and a custom post type. Regular child pages are fine for a handful of cities. If you have many, a custom post type called location with a /locations/{city}/ URL keeps things tidy.
  4. Set up a template. A file like page-locations-city.php lets every city page share a layout while keeping its own content.
  5. Link the hub to every city, and cross-link nearby cities. This is your internal linking backbone.

Why does the subfolder matter? Because Google favors a clearly defined, browsable hierarchy. It also happens to be one of the tests Google uses to spot doorway pages.

A word of caution: city pages must not be islands. If a page is hard to reach from the rest of your site, that's a red flag. Link to your city pages from your main navigation, your footer, and relevant service pages.

Step 2 — Write genuinely unique content for each city

This is the step that decides whether you rank or get flagged. Google's spam policies are clear: pages targeted at specific cities that funnel users to one page count as doorway abuse. And pages generated at scale without adding value count as scaled content abuse.

So what has to be different on every page?

Page element How to make it local
Intro and main answer Name the city and the specific service in the first lines
Examples and projects Show real work done in that city
Team or partner Name the local person or partner customers will meet
Pricing or scope Mention local pricing, travel, or service area details
Reviews Quote testimonials from customers in that city
Map and hours Embed the map for that location and list its real hours

One rule ties it all together: answer first. Put the most important information near the top of the page. AI tools pull a large share of their citations from the first part of a page, so don't bury the point under three paragraphs of company history.

And one hard no: never paste a block of city names into your text to rank for them. Google's keyword stuffing policy calls that out directly.

Ask yourself: what genuinely makes this city different? Did I add real value, or did I just let AI fill in the blanks? Does this page lead somewhere useful, or straight to a form?

Step 3 — Add LocalBusiness schema and technical signals

Schema is just structured data: a small block of code that tells search engines exactly what your page is about. For location pages, it removes guesswork.

Use LocalBusiness schema for each location. Google requires name and address, and recommends geo (latitude and longitude), openingHoursSpecification, telephone, and url pointing to that specific location page. Pick the most specific sub-type you can, like Plumber or Electrician instead of the generic LocalBusiness.

Two more technical points:

  • Self-canonicalize each city page. A canonical tag tells Google which URL is the main version. Since your city pages are genuinely distinct, each one should point to itself. Pointing them all to one master page would tell Google to ignore them.
  • Use hreflang only when you really serve multiple regions or languages. If you don't, skip it.

A word of caution: breaking structured data guidelines can lead to a manual action, and schema never guarantees rich results. Also, don't copy the same schema with one address onto every city page. That's a fast way to confuse both Google and AI tools.

Step 4 — Make the pages fast (Core Web Vitals)

Speed is the entry ticket. If your page is slow, people leave before they ever see your content, and that hurts you on every front.

Core Web Vitals are Google's set of speed and usability signals. The one worth knowing about here is INP, or Interaction to Next Paint. It replaced an older metric called FID in 2023 and measures how quickly your page responds when someone clicks or taps.

What to check:

  • LCP (Largest Contentful Paint): how fast your main content appears.
  • INP: how responsive the page feels when someone interacts with it.
  • Image weight: compress and resize images before uploading.
  • Caching and hosting: a caching plugin and decent hosting do most of the heavy lifting.

You can do all of this in WordPress without touching code. Install a caching plugin, use an image compression plugin, and cut down on the number of plugins you run. Fewer plugins usually means a faster site.

Measure the effect with Google's PageSpeed Insights or Search Console. Then fix one thing at a time and watch the numbers move.

Step 5 — Measure whether AI actually mentions and cites your city pages

Here's the part most people skip. You built the pages, but are AI tools actually talking about you?

Two numbers matter, and they're different:

  • Mention Rate: how often your brand is named in an AI answer.
  • Citation Rate: how often the AI links to your page as a source.

You can be mentioned without being cited, and that gap is common. In Semly's own e-commerce sample, the mention rate sat at 22.6% while the citation rate was 6.8%. That's a big difference, and it tells you something useful: being named is not the same as being linked.

This is a separate measurement from your Google position. You can rank well in Google and still be invisible in AI answers, or the other way around.

Semly is built for exactly this layer. It monitors how your brand shows up across multiple AI models, including ChatGPT, Gemini, Claude, and Google AI. It analyzes the prompts people use, the sources the models pull from, your competitors, and the sentiment of the answers. You get daily reports, and you can start with a free AI visibility report at report.semly.ai.

To be clear: Semly measures visibility. It doesn't build your pages, run local SEO, manage your Google Business Profile, or guarantee results. It tells you what's happening so you can act on it.

Ask yourself: are my city pages cited at all? Which models show them? Where do AI tools get their information about my business?

Common mistakes and how to fix them

Here's a quick repair list. Find your symptom, apply the fix.

  • Templated pages with the city name swapped. Symptom: every page reads the same. Fix: rewrite each page with local examples, team, reviews, and pricing.
  • No links from the hub. Symptom: city pages get no traffic and look like islands. Fix: link from /locations/, your navigation, and your footer.
  • One address in schema for every city. Symptom: conflicting location data. Fix: give each page its own LocalBusiness schema with the correct address and geo.
  • Pasted lists of city names. Symptom: a block of place names in your text. Fix: remove it and write real sentences about each city.
  • No local reviews. Symptom: pages feel generic and unproven. Fix: collect and quote reviews from customers in that city.
  • Slow pages. Symptom: high bounce, poor Core Web Vitals. Fix: add caching, compress images, and trim plugins.
  • No AI measurement at all. Symptom: you have no idea if AI mentions you. Fix: start tracking mention and citation rates per city.

What to do next

Once the pages are live, the work shifts from building to improving. What you do next depends on your situation.

Use this simple decision tree:

  • Few cities (a handful): go deep. Add more local examples, collect more reviews, and refresh the content regularly.
  • Many cities: consider regional hub pages that group nearby locations, and keep a dedicated location sitemap so search engines can find everything.
  • No resources for unique content: build one strong service page instead of many weak city pages. Quality beats quantity here.
  • Ready to go further: set up regular AI monitoring and iterate. Check which pages get cited, then improve those and learn from them.

A quick glossary, since a few terms came up:

  • Doorway abuse: pages built for specific cities that funnel users to one page instead of offering real value.
  • Scaled content abuse: mass-generating pages, often with AI, without adding anything useful.
  • Mention Rate: how often AI names your brand.
  • Citation Rate: how often AI links to your page.

The pattern behind all of this is simple. Build real pages for real places, make them fast, mark them up clearly, and then measure whether AI notices. That's how you show up in multiple cities, in Google and in AI answers alike.

Sources

Check if sees your brand

Enter your website to receive a free AI Visibility Report