On-Page Strategies for Local SEO: Ranking in Multiple Cities

Blake Denman

Sep 11, 202017 min read
On-page Local SEO

Ranking In Multiple Cities: A Guide

You have optimized your website for the main city you want to get new clients in, probably where you are physically located. Your pages have the main city in the title tag, headers, and sprinkled naturally throughout your content to help users and search engine bots understand that you are "keyword in city". 

Rankings start going up, life is good! But, what if you wanted to rank in other cities that you service or have had customers from in the past? 

Unfortunately, it isn’t as easy as just adding the location(s) to your website. 

Ever tried to rank your Google Business Profile outside of the physical location your listing is in? Yeah, you are going to have a hard time. So, what do you do?

I am going to share with you how to approach ranking in different locations that your business is not physically located in.

The main topics I will cover include: 

Doorway Pages

Let’s address the elephant in the room. Doorway pages are a big no-no from Google. Let’s start with what a doorway page is from a  Google Search Console Help article.

Doorways are sites or pages created to rank highly for specific search queries. They are bad for users because they can lead to multiple similar pages in user search results, where each result ends up taking the user to essentially the same destination. They can also lead users to intermediate pages that are not as useful as the final destination.

 Google’s John Mueller has even warned that creating location pages:

But if you work in legal, medical, or professional services for local search, you will often see these purported “doorway pages” rank, what gives?!

Now, we could get into the hat color that location pages can fall in, or the sheer lack of accountability of Google Business Profile enforcing their own guidelines, those are topics for another day. 

If you are trying to create 1000 location pages that are each going after a single query, those would likely fall under the doorway page category.

But if you have done local keyword research and built out location pages properly, it is a different ballgame. 

Our fictitious example: In this guide, I am going to use a guy named Bob as an example of a local business owner.

Bob started an HVAC business in Denver 10 years ago. He has a good reputation and has one location. He finally invested in local SEO after seeing the diminishing returns of traditional advertising. 

His rankings have been improving but Denver is a really tough market, he also knows that areas like Englewood, Littleton, and Greenwood Village are perfect for him because his location is in the SW side of Denver. He can get to these locations easily and they are good markets for him, so what should he do? 

Local Keyword Research

Bob might have an idea of what locations he wants to get new business from outside of his physical location but until it is backed up with data, he will just have assumptions. 

Bob really wants to focus on heating. Summer is coming to a close and the winter months are going to drive up demand for heating related services. If you woke up one morning and your heater was busted, what would you search for? Personally, I would search for “heater repair city.”

As a business you should consider that you are not your customer, so you need to figure out how real people search for this type of service.

The Research Process and Organizing Data

Google Search Console and  Search Analytics for Sheets will be your new BFF.

Search Analytics for Sheets will allow you to pull all of your keyword research into a Google sheet or multiple sheets, quickly. This speeds up the process instead of looking at one city [query] at a time to identify target keywords.

So, let's start from the beginning.

  1. Create a new Google Sheet with the same email address that you use for Google Search Console access. 

  2. Name your sheet whatever you want.

  3. In the menu, click on Add-ons, then click Get add-ons

  4. Click on the magnifying glass and search for "search analytics for sheets".

  5. Install.

  6. You need to verify the tool to be added.

Now that the add-on is installed, let’s pull some data! 

  • Click on add-ons in the navigation bar again, this time you will see "Search Analytics for Sheets".
  • Hover over it and click "Open sidebar".
  • We need to configure the sidebar to pull in historic data for the locations we want to go after.

Select the correct GSC property you want to pull data from. 

  • Date Range: I like looking at the previous 12 months, this gives us a blended average with seasonality of certain types of queries.
  • Search Type: Default (Web)
  • Group By: Query | Page
  • Filter By: We need to add some filters to pull in the data we want to look at. 
  • Add Filter: We can add in multiple filters and we only want to pull in keywords that have our target locations included. We’ll be using Query, contains.

I like putting each location's queries into a sheet by itself. In this situation, I will just have one filter for the targeted location:

Screenshot of Google Search Console data

All of the other fields can remain the same. 

Run the add-on.

**Please note: These are not ACTUAL search volumes for Englewood, Littleton, and Greenwood Village CO. The data was pulled from an HVAC company located somewhere in North America. I swapped out location names :)**

Your new sheet should populate with the columns Query | Page | Clicks | Impressions | CTR | Position.

In this stage, I prefer to clean the sheet up a bit and remove columns Clicks, CTR, and Position.

We now have a sheet that has local keywords and their search volume for the last 12 months. Since Bob wants to focus on "heating" related queries, it is a good idea to remove all of the other keywords not related to heating. 

By doing so, we have a list that looks like this:

Local keyword data example

Why are there duplicate keywords showing in the example?

Good question, different pages in this example triggered impressions at some point in the previous 12 months. 

What we don’t know is if the other page(s) also triggered an impression at the same time. If we are going to combine the searches into one cell, we might have a slightly bloated number. 

It is a good idea to look at the other pages that are driving impressions, too. These pages can be prime internal link targets when you execute your strategy. 

After the list has been cleaned up, this is what we are left with.

A cleaned up keyword list example

Sorting by Impressions

Let’s sort keywords by impressions, do so by clicking into Column C and sort sheet from Z –> A. 

Screenshot showing how to sort data

We now have keywords sorted by the highest search volume.

Remember earlier when I said I would search “heater repair city”? Well, that query had 425 “searches” in the previous 12 months; it is #4 on the list. The highest searched for keyword is “Furnace repair Englewood” with 1052 “searches” in the previous 12 months.

This is why validating is SO important!

Had we just moved forward with our assumption of what everyone searches for we would be missing out on queries that have more than double the search volume of what we thought was the highest searched for keyword.

Breaking Down Keywords Into Categories

Time to break down these keywords into individual categories and group together based on semantic-relatedness (this is the first time I have ever used this phrase, I swear).

What we are really trying to do is decide how our new Englewood heating page is going to be structured. Do we need to create several pages based on intent or can we create one well-optimized page that encompasses all categories on the page?

Having some knowledge of the industry you are working in will help you during this step. 

From these queries, we can break them down into:

  • Furnace/heater repair/replacement/service

  • Heat pump installation/repair

  • Water heater repair/service

  • Boiler repair

Based on data, ee know that we need a page for Furnaces, Water Heaters, and Boilers. What about heat pumps? Heat pumps are commonly used in furnaces but are also used in water heaters. 

In this situation, let's look at the SERP for the top query in this category, which is “Heat pump repair Englewood”.

Example of the SERP for a local keyword

Six of the nine results (including the top 3 organic spots) are dedicated pages to heat pumps. Two of the results are homepages, and the bottom results is a generic HVAC location page. The 10th result, not pictured, is another dedicated page to heat pumps.

Based on this, we know if we want to be competitive for this query, we should have a dedicated page for heat pumps.

Multiple Locations

To be competitive in Englewood, we ll need 3 new pages. We have the keywords we want to go after thanks to Google Search Console and Search Analytics for Sheets. But...Bob wants to rank in Littleton and Greenwood Village, too. 

Shucks, we need to redo this process again for each location. Remember what we learned about assumptions earlier? 

People in these areas might have different needs and might search differently.

Local search query list for a city
Local search query list for a different city

Littleton has a lot of similarities to Englewood, but Greenwood Village is entirely different; lower search volumes, not as many variations of keywords, but a decent volume on “Emergency heating service”.

"Emergency" wasn’t included on either of the other locations: we should make emergency services a big feature for our Greenwood Village page.

Again, we would not have known this was an important feature had we just assumed users in Greenwood Village searched the same as users in Englewood.

We have search volumes and keywords that we want to go after, what now?

SERP Analysis

Before we just start writing content for these pages, we need to figure out what we’re going up against, identify SERP features, and judge the overall intent of the queries.

In our Englewood example, there are 36 queries we potentially want to rank for and 3 pages we are needing to build. 

No, we do not need to look at each query’s SERP; ideally, we should look at 2-5 for each topic (page).

Here are the SERPs for the page we want to build for “Furnace Repair Englewood” (click to expand):

Local SERP examples

SERP Features

What SERP features do you see?

I see: 

  • People Also Ask (PPA) box

  • Q&A schema

  • AggregatRating schema

The PAA box contains very broad level questions about furnaces, but these are good topics/considerations for our new page.

Q&A schema is a great way of getting more real estate on a SERP. Thumbtack is the only result that is displaying Q&A schema.

Review schema should not be showing at all given Google stopped displaying rich results for LocalBusiness. There are ways around it which is how one company is still displaying AggregateRating.


Given the types of queries we are going after for Englewood, the intent appears to be mainly focused on repairing, servicing, or replacing a furnace. 

The results reflect this. The People Also Ask boxes on 2 of the results also help us reiterate the intent of the page. Typically, people are wanting to know how much it costs to repair a furnace, when do I need to replace a furnace, etc.

Content Writing

We need to provide better content for our target queries compared to the competition. We can’t start writing our new page’s content until we have looked at the content currently ranking.

Going back to our Englewood SERPs example, we can view the top-ranking pages to see how the pages are structured, what they cover, and provide us some insights on how to outrank them.

As you are going through and looking at ranking content, keep these things in mind:

  • You don’t need to provide generic information about a city like Englewood CO to rank. Adding the population, location, and history of the city isn’t helpful to users. Users that live in Englewood know this information or don’t really care, so why include it?

  • Images are your friend. Just because some of the ranking pages don’t use photos doesn’t give you an excuse not to. Who likes looking at a giant wall of text?

  • Don’t try to come up with a needed or recommended word count. Give users what they want and ditch the rest.

  • We aren’t trying to copy the competition. 

Overall, our goal is to really highlight what the service(s) is, why it is needed, and try to weave in anything local that might be relevant.

So, we ask Bob about typical issues and tips for furnaces that he usually encounters, this is what he tells us:

“You would not believe how many furnaces crap-out because the filter hasn’t been changed in a year. Right now we’ve got a lot of fires going on in CO and the air quality isn’t great, people should be changing out their filters every 2 weeks.”

— Fictitious Bob

If you are working on behalf of a company, this type of tip is definitely something you should do.

The People Also Asked sections give us something, but what Bob just told us is gold. In this fictitious case, we would likely want to create a post talking about the importance of this in the current climate and promote it everywhere we could. 

Organizing and Writing

After researching, we are armed with everything we would want and it is time to write out the copy for the page.

Headers are going to help us break up our content into bite-size pieces and allow users to skip to sections of the page to find what they are looking for. 

Images will help, too. For the love of the Internet, please don’t use stock photos. Bob and his small crew have taken 1000s of photos over the years of busted and fixed furnaces. Create some nice looking before and after photos to use on this new page! 

Keywords in Headers and Copy

Breaking up your content into sections will help you keep the page organized and allow you to better “optimize” the page for all of the relevant queries you are going after. 

For adding keywords to your header tags, don’t just simply use [keyword city] as your template — that is lazy.

For our example, the lazy H1 would be "Furnace Repair Englewood".

  • Why does Bob deserve to rank?
  • What sets Bob apart from everyone else? 

Create Headlines That Create Trust and Get Clicks

Bob has a good reputation, doesn’t overcharge, and is just a nice guy. How about using an H1 like "Englewood’s Trusted Furnace Repair Specialist". The keyword is still being used but it sounds better than the keyword by itself. 

When writing your header tags, add in elements that make that business shine.

When writing copy, don’t focus on how many times or how often a keyword needs to be included. If Bob was having a conversation with a potential customer, how would that conversation go? Keywords should be naturally included in the copy while creating trust with authoritative and helpful information.

After you have written each section, read the section out loud to yourself. If it sounds conversational and natural, great! If not, you might need to refine the content a bit.

Frequently Asked Questions

There were several PAA boxes on the SERPs we looked at. Could there be more? Maybe.

We should see if we are missing anything with 2 simple steps;

  1. We asked Bob earlier about common things he sees; we should also ask him about the most asked questions he gets, too. 

  2. AlsoAsked.com - A great and free tool. 


SEMrush's Topic Research Tool allows you to enter a keyword, find semantically-related keywords, and see all the questions people ask, plus recent headlines. 

topic research tool data

With all the data you collect, you can create a FAQ section and include a list of questions or you can create unique sections for each question. You can also group similar and related questions — anticipate the next question a person may have and at it to the group. 

Generating Q&A Schema

Once the content has been written, we want the opportunity for some of our FAQ sections to show in the SERP. 

To do this, we need to generate the structured data for it. 

We use FAQPage JSON-LD Schema Generator to accomplish this. Simply add in the question, then the answer, add more questions, you get the drift. Once you have added all of your questions and answers, grab the code and paste it into a notepad for safekeeping until it needs to be deployed.

Using Google Tag Manager to Deploy Q&A Schema

Now that we have identified the questions we would like to answer and generated our schema, we can use Google Tag Manager to deploy it to the pages we want the markup to live. Before we go any further, you may have noticed an extra bit of code in your markup, here is an example with that code in bold: 

<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How do I deploy Q&A Schema?","acceptedAnswer":{"@type":"Answer","text":"This is how!"}},{"@type":"Question","name":"What if I have a second question?","acceptedAnswer":{"@type":"Answer","text":"Here you go!"}}]}</script><!--FAQPage Code Generated by https://saijogeorge.com/json-ld-schema-generator/faq/-->

While this is harmless, we always remove it from our clients’ sites. Let's look at how to do it right. 

  • Log in to Google Tag Manager: this should be easy if you already have an installation setup.

Screenshot of sign in for Google Tag Manager
  • Head to the left-side tabs and click "Tags".

Tags in Google Tag Manager
  • Click "New" to create a new Tag

  • We will rename this tag to "Q&A Schema Tag" so we can keep track of it, and click "Tag Configuration" to set the script up.

  • Under the second section, "Custom", you will find "Custom HTML", click it:

Choosing tag type in Google Tag Manager screenshot
  • Paste the code we created and edited earlier, then click on "Triggering" to set the pages where we will fire this specific Q&A Schema.

  • Google Tag Manager automatically creates an "All Pages" trigger, but that won’t be useful unless we have the same Q&A present on every page on the site.

  • For this example, let’s say we want the Q&A Markup Tag to fire on the /contact/ page of our site, we need to click the top right "+" to create a Contact Us Page Trigger.

  • Click "Trigger Configuration" in this new section, and select "Page View" under the first section

  • Set the trigger to fire on "Some Page Views", when the Page Path Equals /contact, per the screenshot below.

Google Tag Manager configurations
  • Now it is just a matter of saving this Trigger, saving the Tag it serves, Publishing to the site (blue button in top right that says Publish), and checking our work.

  • To preview your Google Tag Manager Workspace on the site, click the Preview button and go that page on the site, you should see an orange banner.

Google Tag Manager Workspace preview orange banner
  • If your tag shows when you load the page, you are golden!

Google tag manager screenshot

Publishing and Internal Linking

Our new pages need a home on Bob’s website (we are just going to assume the other pages have been created).

If you are new to creating a sound URL structure for local SEO, I have a more in-depth post here. The new pages are focused on heating. Bob has a page on his website that talks about his heating services. 

The new pages should be nested underneath the heating page

That would look like this:

  • bobsawesomehvac.com/heating <– Heating parent page
  • bobsawesomehvac.com/heating/englewood
  • bobsawesomehvac.com/heating/littleton
  • bobsawesomehvac.com/heating/greenwood-village

You need the topical flow of the website to be organized.

On Bob’s heating page, we would need to add some text links to point to the new pages. These links should be easily found in the first paragraph/intro paragraph of the page.

We aren’t done yet.

Sure, you can add an "Areas Served" footer column and add keyword-rich links to these new location pages. 

Google has said that they don’t help but I have seen it work quite well for huge brands, website design companies that add keyword-rich links to their sites, and multi-location businesses.

So, take Google’s advice with a grain of salt. Try it out for yourself. Publish your new page(s) and don’t add any footer links. After 4-6 weeks you should see how you rank. Then add those footer links and see what happens.

In Bob’s navigation, he has a main link for Heating; we are going to add a dropdown and add our new page links there, too. You want people to easily find the related services they need. 

Search Operators 

Search operators are your friend. Here is a simple one to use:

Site:domain.com “location”

You might find other pages that have mentions of the location, or blog posts that contain the location. Let's look at an example of how you can use these pages, and update them for better rankings.

  • Bob had a blog post (it is not really a blog post, Bob published 100 photos and added 1 sentence to the top) 4 years ago about a really big heating job he did in Englewood. 
  • Not only are we going to add a link from that post to the new "Englewood" page, but we are also going to highlight and provide more content on the Englewood page.
  • We are also going to consider adding some more unique content on that post, too.

When you have exhausted all of these kinds of options on your site, it is not a bad idea to just peruse the site and see if there are any internal link opportunities that make sense to add. 


How long will it take for rankings?

Great question and I am happy to say that I don’t have the answer for you.

I am going to assume after the page(s) were added and you added all of your internal links, you updated your XML sitemap and resubmitted it to Google Search Console.

Didn’t do those things? Do those first before you complain about Google sandboxing you.

There are a lot of factors that will determine when your page gets indexed and when it’s TRUE ranking is achieved. If you really want to influence those factors, you should start building good, inbound links to these new pages. 

No amount of submitting page(s) to social bookmarking sites, “SEO optimized” directories, behance.net, or creating blogger.com subdomains is going to help you. Real, topical and/or local links are where you need to invest your time and efforts. I have some ideas for you.

Topical links:

  • Industry associations

  • Topically focused websites

Local links:

  • Local sponsorships

  • Local organizations (Chamber of Commerce)

  • Local vendor testimonials

All local businesses need an SEO strategy. If you don't have a big budget for it, the steps and strategies I outlined above can really help you get the results you need. 

All local businesses need an SEO strategy. If you don't have a big budget for it, the steps and strategies I outlined above can really help you get the results you need. Looking to take your local SEO strategy a step further? Try our local rank tracker tools.

Here are some helpful resources for link building. 

Find Keyword Ideas in Seconds

Boost SEO results with powerful keyword research

Free Keyword Research Tool

Author Photo
Blake Denman is the President & Founder of RicketyRoo Inc, a local SEO agency based in Bend, Oregon, and the proprietor at verygoodlocalseo.com. Blake has more than 13 years of local SEO and paid search marketing experience working with industries ranging from addiction treatment centers, law firms, dentists, multi-location companies, and professional services. Blake is a contributor to the Local Search Ranking Factors Survey and speaks at digital marketing conferences around the US about local search.