Find out why competitors outrank you, keyword by keyword
On this page
"They rank higher than you" is an observation. "Their page for that search is a dedicated service page with the town in its title, and yours is a homepage that never names the town" is a finding an owner can act on. This tutorial is the method I use to get from the first to the second, for every search that brings in customers.
What you will do
- Choose the money keywords customers type when they are ready to buy.
- Map the competitor field, with the map pack and organic results kept separate.
- Pull measured rankings and search volumes instead of guessing.
- Diagnose every keyword a rival wins, with evidence an owner can check.
- Record each finding in an Improvement Register with a fix, a scope, and a priority.
- Decide what goes on the homepage and what needs its own page.
- Re-check the same keywords after the changes ship.
Time and cost
The data pulls are the quick part. Most of the time goes into the diagnosis, because every verdict means measuring two pages side by side.
I pull volumes, rankings, and page data from DataForSEO, a pay-per-call service. For a local business with a couple dozen keywords and a handful of rivals, a full run has cost me under a dollar in API fees; check current prices before you start. Any tool that reports localized map pack and organic positions can do the job.
Choose the money keywords
A money keyword is what a customer types when they are ready to buy, usually a service plus a place. It is rarely the industry term the business uses internally.
- Start from the services that pay the bills
List what the business sells and wants more of, and write one keyword per service line. Start there, not in a keyword tool.
- Phrase each one the way customers search
Use the plain service with the town, such as
water heater repair <town>, and add the state for the main ones. Rival page titles are a good source of phrasing you missed. - Add the near-me and bare versions
Include
<service> near meand the service on its own. Google localizes these to the person searching, so they are mostly decided in the map pack, and they often carry more real demand than the phrases with a town name. - Add the national head term
A local business will not win it, but the owner should see who holds the top of the market and why chasing it is the wrong fight.
- Add the brand
Include the business name, alone and with the town. Brand searches are where I have found a lookalike listing forwarding customers to a lead broker, a problem no service keyword would reveal.
Map the real competitor field
The competitors an owner names and the businesses Google shows are often different lists. And there are two lists, because the map pack and the organic results are separate fields.
| Field | Map pack | Organic results |
|---|---|---|
| What it shows | A few Business Profiles with ratings and review counts | Web pages: local businesses, directories, national chains, lead sites |
| What decides it | Relevance, distance from the searcher, and prominence, per Google | The page, the site around it, and the links pointing to it |
| Who you face | Businesses located near the person searching | Anyone with a strong page, wherever they are based |
| Where the fixes live | The Business Profile, reviews, and citations | Your pages, your site's quality, and your links |
- Search from the town
Use a tool that sets the search location to the town, or at least a private browser window. Signed-in results from your own office are not what customers see.
- Classify what you find
Label each result as a direct competitor, an adjacent business, a directory or marketplace, or a doorway site that publishes a template page for every town without being local anywhere.
- Shortlist six to eight rivals
Pick the direct competitors that appear most, local ones first, then the regional or national player that holds the head terms.
Pull real rankings and volumes
- Pull volumes for the town and the country
Request monthly search volume for every keyword, located to the town and nationally, and record the cost per click. What advertisers pay for a click is a number owners understand.
- Record "no data" as a finding, not a zero
Phrases with a town name often fall under the reporting threshold. People usually type the bare service and let Google localize it, so the near-me and bare terms tell the demand story.
- Count close variants once
When phrasings such as
window tint near meandwindow tinting near mereturn identical volume and cost per click, they are usually the same demand grouped together. Count it once. - Pull both result types for every keyword
At the town's location, pull the organic results at least 20 positions deep, plus the map pack, and record every position. "Not in top 20" and "not in pack" are real values.
- Measure each domain's footprint
Record how many keywords each domain ranks for and its estimated organic traffic, a rough proxy for authority. If you have no link data, say so instead of guessing about links.
- Snapshot the Business Profiles
For the main keyword, record the rating, review count, primary category, and claimed status of every business in the pack, and your own. Map pack losses are diagnosed from this table, not from websites.
The results go into a standings table with one row per keyword. This row shows the format with made-up values:
| Keyword | Volume (town / US) | You: organic | You: map | Best rival | Winning URL |
|---|---|---|---|---|---|
| water heater repair <town> | no data / <US volume> | not in top 20 | not in pack | Rival A: organic 2, map 1 | /water-heater-repair/ |
Diagnose each keyword a rival wins
For each keyword a rival wins, compare the winning page with your best page for it: the one that ranks, or the homepage if nothing does. Skip directories unless a directory beats every local business. The first three groups follow how Google describes local ranking (relevance, prominence, and distance, which marketers often call proximity); the fourth is the site itself.
| Group | Check | What "they win" looks like |
|---|---|---|
| Relevance | Dedicated page | They have a page for this exact service. You rank the homepage or nothing. |
| Relevance | Title, H1, URL | Their title and main heading carry the phrase. Your title is the business name. |
| Relevance | Town named | They name the town in the title, heading, and body. You never say where you are. |
| Relevance | Depth | Their page covers the service in detail and yours is a few lines. Measure both word counts. |
| Relevance | Structured data | They mark up the business with name, phone, and areas served. You have none. |
| Prominence | Reviews | More reviews, more recent ones, at a similar or better rating. |
| Prominence | Footprint and links | Their domain ranks for far more keywords. Links belong here too, if you can measure them. |
| Prominence | Citations | They are listed, with consistent details, in the directories that rank for the keyword. |
| Distance | Location | Map pack only: they are based closer to the people searching. |
| Site quality | Speed and mobile | Their page loads quickly and works on a phone. Yours is slow or breaks. |
| Site quality | Broken pages | Their links work. Yours lead to errors, or an indexed page is dead. |
| Site quality | Internal links | Their page sits in the main navigation and is linked from related pages. |
- Open both pages side by side
Read the title, main heading, URL, and first screen of each. Most relevance gaps show up in the first minute.
- Measure instead of judging
Pull word counts, structured data, internal links, load time, and mobile issues for both pages with a crawler or on-page tool.
- Write one verdict per keyword
Cite at least two measured differences with the numbers, name the winning URL, and end with a fix. Never write "better content" or "stronger SEO" without the measurement behind it.
Keyword: <service> <town> (town volume, or no data)
You: organic <position or not in top 20>, map <position or not in pack>
Winner: <rival>, organic <position>, map <position>
Their page: <URL>: dedicated? phrase in title and H1? town named?
word count, structured data, internal links
Your page: the same facts for your best page
Map pack: their rating, review count, and category vs yours
Why: two or three measured differences
Fix: what they did, written as a register row
For a hypothetical plumber, a finished verdict reads like this: not in the top 20 or the pack for water heater repair plus the town. The winner holds the first map spot with a dedicated water heater page that names the town in its title and heading, runs several times the plumber's word count on the subject, and carries structured data. The plumber's best page is the homepage, which mentions water heaters once. Fix: a dedicated page built to the same depth, with the town in the title and heading.
Real audits turn up findings just as specific. A window replacement company held the first map spot in its small home city for a search with almost no measurable volume, while it was invisible for window replacement in the big city next door. One of its city pages still carried another company's name in the title tag, left over from a template.
Write the Improvement Register
Every verdict becomes at least one row in a single table I call the Improvement Register. Search, website, profile, and tracking findings all go in it, so the report, the website rebuild, and the monthly plan read from one source instead of drifting apart. These rows are hypothetical:
| ID | Finding | Evidence | Who does it better | Fix | Scope | Priority |
|---|---|---|---|---|---|---|
IR-01 | No page targets water heater repair | Not in top 20 or in the pack; ranking pull, dated | Rival A, dedicated page | Build a water heater repair page with the town in the title and H1 | New page | 1 |
IR-02 | Homepage title is only the business name | Title tag from the on-page pull, dated | Rival A: service and town in the title | Rewrite the title with the main service and the town | Homepage | 1 |
- Merge duplicates
Several verdicts often point to the same fix. Keep one row and list every keyword it serves.
- Pick the one thing
Choose the single most damaging verified finding an owner can check in thirty seconds. It leads the report. For agencies, prospecting with audits covers how it leads the outreach too.
- Close every website row
Every homepage and site-wide row ends the project marked done or deferred with a real reason, such as "needs the owner's price list." A blank means the site was built without reading the register.
Decide what goes on the homepage
The homepage cannot rank for everything, but it carries the signals every other page depends on. The register's scope column decides where each fix goes.
Which towns earn a page is covered in service-area pages.
Re-check rankings after changes
- Save the baseline
Keep the first pull with its date, location, and depth. Every later comparison uses it.
- Ship, then let Google recrawl
Nothing counts until Google recrawls the changed pages. Request indexing for the most important URLs in Search Console, submit the sitemap for the rest, and judge results over weeks, not days.
- Re-pull with identical settings
Same keywords, same location, same depth. Changing any of them breaks the comparison.
- Read each field separately
Compare map pack and organic positions on their own, and check Search Console impressions for the pages you changed. Note which register rows shipped and whether their keywords moved.
- Repeat monthly
Positions shift from day to day, so read the trend across several pulls, not one result. Add register rows for anything a re-check turns up.
What's next
- Service-area and city pages that help instead of hurt: why swap-the-city-name pages rarely rank, how to build fewer hub pages with real local proof, and how to retire thin city pages with 301 redirects.
- Get more Google reviews without breaking the rules: how to ask every customer for a Google review, reply to good and bad ones, and stay inside Google's review policy while building a steady flow.
- Set up and verify a Google Business Profile the right way: set up a Google Business Profile that is accurate, verified, and owned by the business, plus the profile traps I find in real audits.
Rather have me do this for you?
In five business days I walk every path a customer takes to reach you, score each touchpoint, and hand you a ranked list of where leads leak out.