Local SEO checklist: what your website needs to rank nearby

·4 min read

This local SEO checklist covers the half of local search you control on your own website. Give each location its own page, print the name, address and phone in the page's HTML exactly as your Business Profile has them, make the phone a tel: link, add LocalBusiness markup that matches the visible text, embed or link a map, and build service-area pages only where you have something real to say. Leave review stars off your own markup.

Your Google Business Profile does most of the map pack work. The website confirms it, and when the two disagree, neither looks trustworthy. For the wider plan, including the profile and reviews, read SEO for small businesses.

The local SEO checklist at a glance

Item How to check
One page per location Every branch has its own URL, linked from the nav or a locations index
NAP in the HTML View-source shows the name, address and phone as text, not in an image or a script
NAP matches the profile Character-by-character match with your Business Profile
Tappable phone The number sits inside <a href="tel:...">
Map on the page A Google Maps embed or a link to your listing
LocalBusiness markup One block per location page, matching the visible text
No self-serving stars No aggregateRating or review on your own business
Honest service-area pages Each one says something the others do not

One location page per branch, with NAP in the HTML

A location page is the URL your Business Profile's website field points to, so it has to exist and it has to be specific. A single "Contact" page listing four branches gives none of them a page that can rank for "plumber in Leeds."

Each page needs that branch's name, street address, phone, hours and a few lines on what it does there. Then check three things.

  1. View the source. Press Ctrl+U and search for your street name. If it is missing, the address lives in an image, a JavaScript widget or an iframe. Crawlers that do not run scripts will not see it.
  2. Compare it to the profile. "Suite 4, 12 High St" on the site and "12 High Street #4" on the profile is the kind of drift that piles up across directories. Pick one format and use it everywhere.
  3. Tap the number on a phone. It should start a call. The markup is one line:
<a href="tel:+441134960123">0113 496 0123</a>

Use the international format in the href and whatever local format customers expect in the link text.

Add a map too. Copy the embed from your own Maps listing, not from a search for the street, so the pin lands on your business.

Service area pages without doorway pages

Service area pages are fine when each one describes real work in that place. They become a problem when you clone one page fifty times and swap the town name.

Google's spam policies list, as an example of doorway abuse, "multiple domain names or pages targeted at specific regions or cities that funnel users to one page." A page that differs from its siblings only in the city name fits that description.

Read two of them side by side. If you could swap the town names unnoticed, merge them. A good service area page names jobs you did there, local conditions that change the work, the response time for that area and the team that covers it. If you do not have that material for a town, a single "Areas we cover" page listing the towns does the job better.

LocalBusiness markup that matches the page

LocalBusiness markup is a JSON-LD block that restates the page's name, address, phone, coordinates and hours in a form machines read without guessing. Use the most specific subtype, such as Dentist or Plumber, and one block per location page. Our LocalBusiness schema guide has the property list and a full example, so here are only the checks.

  • Paste the page into Google's Rich Results Test and confirm it finds one local business, not zero or six.
  • Compare the telephone and streetAddress in the markup with the visible text. They should match exactly.
  • Check that geo has at least five decimal places, which Google's local business documentation recommends.
  • Remove aggregateRating and review if they describe your own business. Google's review snippet guidelines make a page ineligible for stars when the business controls the reviews about itself. Testimonials can stay as plain text.

That last one is the item I find most often. A review widget plugin quietly adds aggregateRating to every page, the stars never appear, and the owner assumes something else is broken.

Check your local business page

Our Local Business Schema Checker runs the on-page part of this checklist against one location or contact page. It reads LocalBusiness markup in JSON-LD or microdata from the HTML your server sends, so it does not run JavaScript. It flags missing markup or an address placed on an Organization instead, a generic LocalBusiness type, a missing name, an address as plain text or with missing fields, no telephone or one without a country code, missing, invalid or imprecise coordinates, missing or invalid opening hours, an overlong priceRange, no listing profiles in sameAs, review markup on your own business and several locations on one page.

It also confirms that the marked-up phone and address appear in the page text, flags a phone shown without a tel: link, and reports any map link or Google Maps embed it finds. Each run costs 5 credits. It does not audit your Google Business Profile, check citations or track rankings.

Keep reading