Local SEO. Search Console
Your Search Console Impressions Aren’t Local. Here’s How to Split Them Out
Written by Ram Kr Shukla, SEO consultant for US local service businesses
Quick answer
Most impressions on a local service site come from people the business can’t serve: national how-to searches, blog readers in other states, and queries naming towns well outside the service area. Search Console can’t filter by state or city, only by country, so you split them yourself. Take brand out, then use a regex for your towns, county and near me terms, a second regex for questions and DIY words, and a page filter separating service pages from blog posts. Report local non-brand clicks and Google Business Profile calls, direction requests and website clicks. Keep total impressions as a footnote.
The chart looked fine. A US roofing and exteriors contractor I work with had 66,979 Search Console impressions in 28 days, and the line had been trending up for most of the year. The phone wasn’t ringing any more than before.
The rest of the screen explained why. 192 clicks. A 0.29% click-through rate. An average position of 13.2. The previous 28 days were nearly a copy: 204 clicks on 70,265 impressions, same 0.29%. And about 18% of those clicks were people typing the company’s own name, which left roughly 5.6 non-brand clicks a day.
So the big number wasn’t growing the business. Most of it was searches from people the contractor could never serve. Homeowners in other states asking how to fix their own fascia. Researchers on desktops reading about wood rot. None of them were ever going to book a roof inspection.
This guide shows how to separate local impressions from non-local ones, what Search Console can and can’t filter, which page-one clusters actually turn into calls, and what to put in front of the owner instead of a total impressions line. It’s the measurement layer I build first in every local SEO engagement for US service businesses, because every decision after it depends on reading the data right.
Why a Local Business Collects Impressions It Can’t Serve
Google localises some searches heavily and others barely at all. Type a service term on your phone and Google assumes you want someone nearby: it shows a map pack, and the organic results tilt toward local businesses. Type a how-to question and there’s no reason to localise. Google ranks whoever explains it best, anywhere in the country.
A contractor’s site that answers homeowner questions well gets shown to the whole country for them. That’s where the impression pile comes from. On the roofer’s site, the soffit and fascia service page ranked at position 1.0 for a generic fascia repair query: 878 impressions, 1 click. The same page also surfaced for fascia repair queries naming towns more than a hundred miles away, two of them in other states. The wood rot repair page took 4,956 impressions at an average position of 18.3 and earned 12 clicks.
In practice the non-local pile has three main sources:
- Generic repair and how-to terms. Fascia repair, wood rot, how often to water a lawn. People search these to fix things themselves or to learn, and Google serves them nationally.
- Blog posts written for homeowners. The more useful the post, the further it travels. That’s good for reach and does almost nothing for this month’s calls.
- Queries that name somewhere else. Your page ranks for a term, and Google also shows it to people adding their own town to that term. They’re looking for a contractor where they live.
The device split is the first tell
Look at the device report before anything else. People who need a roofer, a lawn crew or a mosquito treatment mostly search on their phones, often standing in the yard looking at the problem. When desktop dominates and its click-through rate is tiny, a lot of those impressions are research, and research travels.
On the roofer’s site, desktop carried 45,472 impressions at 0.20% click-through. Mobile carried 19,530 at 0.52%. For a trades business that’s upside down. It isn’t proof on its own (plenty of homeowners research on a laptop at work), but it’s the first sign that the impression total is mostly people who were never going to call.
Most of the total has no query attached
Here’s the part that catches people out. Only about 4,600 of the roofer’s 67,000 impressions resolved to a query you could actually read. The rest were anonymised. Google leaves out queries that aren’t issued by more than a few dozen users over two to three months, to protect the searcher. They still count in the chart total, but they never appear in the query table (Google’s deep dive on Performance data).
So roughly 93% of that headline number couldn’t be classified by query at all. That’s why the method further down leans on page filters as well as query filters. And it’s why brand plus non-brand never adds up to the site total, which I’ve covered in branded vs non-branded search traffic.
What Search Console Can and Can’t Filter for Local
The Performance report gives you six ways to slice the data: query, page, country, device, search appearance and date. Every local question has to be answered with those six. Here’s what each one does for a business that serves a few towns.
| Filter | What it gives you | The local catch |
|---|---|---|
| Country | Searches grouped by the searcher’s country | Stops at country. There’s no state, metro, county or city filter. |
| Query | Contains, exact or regex match on the words typed | Only sees queries that aren’t anonymised, and never where the searcher was standing |
| Page | Contains, exact or regex match on your URLs | Keeps anonymised queries in the totals, so it’s your best view of the hidden part |
| Device | Desktop, mobile, tablet | Not location, but a strong hint about who’s searching |
| Search appearance | Rich result and feature types | Little local use for most service sites |
| Date | Ranges, plus one comparison at a time | Recent days backfill, so pull every period in one sitting |
The country filter is the one people expect more from. Setting it to the United States removes overseas noise and nothing else. A search for a roofer typed in your city and the same search typed 600 miles away land in the same row.
Query filters accept regular expressions in RE2 syntax. They match anywhere in the query unless you anchor them with ^ or $, and they aren’t case-sensitive by default (Search Console’s advanced filtering help). That’s what makes the bucket method below workable in the free interface.
The implicit query problem
Plenty of local searches don’t name a place. Someone types “gutter guard installers” on their phone and Google works out the location for them. A Sterling Sky study of 894 conversions found these implicit queries converted better than explicit ones with a city in them (Search Console vs Google Business Profile case study). So you can’t throw away every service query without a town in it. You can’t locate them either. Search Console has no idea where that person was.
What never reaches Search Console
Two local things sit outside Search Console entirely. The first is the map pack on mobile. The same study found that mobile local pack listings often don’t show a website link until someone taps into the listing, so those views may never register as impressions for your site. The second is everything that happens on your Business Profile itself: calls, direction requests, messages. None of it touches your website, so none of it shows up here.
If you have GA4, it does report a City dimension for sessions, estimated from IP address (GA4 predefined user dimensions). That’s a useful sanity check on where organic visitors come from. It only covers visits, and IP locations are approximate. One of the two companies in this post had no GA4 property at all, so Search Console and the profile were all there was.
Sort Every Query Into One of Five Buckets
Before any filters, decide what you’re sorting into. I use five buckets, checked in a fixed order so a query can only land in one.
People typing your name. They already know you. Report them separately, so a strong month of referrals doesn’t pass for SEO growth.
Your city, neighbouring towns, county, zip codes, near me, nearby. The cleanest local signal Search Console offers, and usually a small slice.
Your service term plus somewhere you don’t work. Real buyers, wrong contractor. They can’t convert, so they shouldn’t sit in the growth number.
How, what, why, DIY, signs of, meaning. Mostly national. Worth having for reach, and measured as content.
Bucket five is whatever’s left: plain service terms with no place and no question words. Some of it is a neighbour on their phone. Some of it is someone 600 miles away. You’ll never resolve it exactly, so judge it by landing page and device, and report it as its own line.
How to Split Local From Non-Local Impressions in Search Console
This takes about an hour the first time, and ten minutes a month after you’ve saved the patterns. Everything happens in the Performance report on the Search results tab.
One note on step 6: if your blog posts sit at the root of the site (the WordPress default), there’s no folder to match, so list the post slugs inside the regex instead.
Step 7 is the one that bites. On the lawn care company’s first report, a period worked out by subtraction put a page’s impressions at 225 when a direct pull for the same days returned 609. Page-level rows summed to 3,838 impressions against a site total of 3,404 for the same window, because the two scopes count differently. A same-day pull also moved from 30 impressions to 215 within hours as Google backfilled. Before it was caught, the draft claimed rebuilt pages were up 325%. The real figure was 39%.
Which Page-One Clusters Are Actually Local Money
Once the national noise is out, what’s left is smaller and far more useful. On the roofer’s site, the clusters that could produce calls were already on page one. They just weren’t getting clicked.
| Local cluster | Impressions | Position | Clicks |
|---|---|---|---|
| Six location and trust pages (residential and commercial roofing, storm damage, repair, insurance claim), 90 days | 7,413 | 3.4 to 7.8 | 0 |
| Attic insulation [your city], two variants, 28 days | 79 and 64 | 6.3 and 5.7 | 0 |
| Asphalt roof repair in [town], six service-area towns, 90 days | about 450 | 8 to 14 | 0 |
| Gutter guard cost page, 28 days | 848 | 8.1 | 0, down from 4 |
| Best contractor in [your city] for soffit, fascia and siding, 28 days | 21 | 1.8 | 0 |
Every row has a place name in it, ranks between 1.8 and 14, and gets nothing. Compare that with the national side: the fascia query at position 1.0 that drew 878 impressions and 1 click. The local rows are smaller, but they’re the people who’ll actually ring.
Zero clicks at positions 3 to 8 on a local query usually means one of two things. The title and description don’t look like the answer, or the map pack sits above the result and takes the click. That’s a title, meta and profile problem, not a content problem. On the roofer, the plan put the snippets on that zero-click page-one set first in line, ahead of any new pages.
The cost of leaving it shows up fast. A month later, average position had improved by more than a point while clicks fell from 210 to 182, about 13%. Rankings up, clicks down, because the zero-click set still hadn’t been fixed. If a falling average position is what’s worrying you, read why average position drops when impressions grow. If the local clusters you find have no page to land on, that’s a separate job: local service page gap analysis in Search Console.
For trades specifically, this is the core of my roofing SEO and construction company SEO work. The page-one local set is nearly always the cheapest win on the site.
When the Growth Is Coming From Blog Posts
The lawn care and mosquito control company had the opposite shape: a young site with impressions genuinely climbing. Two equal 21-day halves gave 26 clicks on 3,975 impressions, then 38 clicks on 5,518. Impressions up 39%, clicks up 46%, at a site-wide click-through rate of 0.69% and an average position of 15.6.
The easy report says the SEO is working. The accurate one asks what’s producing it. Here it was three blog posts that had recorded zero impressions in the first half:
- A dethatching versus aeration comparison: 398 impressions at position 10.6.
- A how much to water your lawn guide: 187 impressions at position 5.6.
- A what grass do I have explainer: 130 impressions at position 13.4.
About 700 new impressions in twelve days. Good news, and almost all of it informational. Watering questions and grass identification don’t stop at the county line. They belong in the content line of the report, kept apart from the local line.
The service pages told the local story. The lawn aeration page climbed from position 34.6 to 21.3 with impressions up 38%. The mosquito control page’s impressions rose 198% while its position slipped from 26.6 to 37.3. That looks bad until you see why: the page had started surfacing for a much wider set of queries, and most new queries enter low. Reported as a single number, it reads as a decline. Explained, it’s a page getting wider coverage.
Five newer articles had produced almost nothing yet: 15 impressions on one, 4 on another, 2, then zero on two more. That’s normal discovery lag in the first few weeks. Don’t claim credit for posts that haven’t been found yet.
What to Report to the Owner Instead of Total Impressions
An owner reads one thing from an impressions chart: up is good. If you show it, you’ll spend the meeting explaining why up didn’t mean calls. Lead with lines that track the phone instead.
| Report line | Where it comes from | Why the owner cares |
|---|---|---|
| Local non-brand clicks | Search Console, area regex with brand excluded | New people from your towns reaching the site |
| Clicks to service and location pages | Search Console, page filter | Visits landing where a quote request can happen |
| Page-one local queries with zero clicks | Search Console, area regex, position under 10 | The fix list for next month, in plain numbers |
| Calls, direction requests, website clicks | Business Profile Performance | Actions taken from the profile, mostly from the map pack |
| Non-brand profile search terms | Business Profile Performance, searches | Whether the profile is found by people who don’t know you yet |
| Leads and booked jobs | CRM, call tracking, form inbox | The only line that pays the bills |
| Total impressions | Search Console | Footnote only, with one sentence on why it’s mostly national |
A few rules make the numbers hold up when the owner asks a hard question:
- The last 2 to 3 days of any pull are missing or partial. Either end the window before them, or estimate them at the trailing seven-day run rate and say so in a footnote.
- The reporting month doesn’t have to be a calendar month. One of mine runs from the 11th to the 10th. Pick a cycle and keep it.
- When a metric moves the wrong way, explain the mechanism. A falling site-wide average position while query coverage grows is expected, and an owner who’s told why stays calm.
- If the site has no data before you started, say so. Every comparison is then work period against work period.
If the site gets traffic but the leads still don’t come, the problem may sit after the click. That’s a different diagnosis, covered in getting website traffic but no leads.
How Google Business Profile Performance Fills the Gap
Search Console tells you about your website in organic results. Most local buying happens a level above that, in the map pack and on the profile. The Business Profile Performance report covers that layer (Google’s Business Profile performance help):
- Calls: how many times someone tapped the call button on your profile. A tap isn’t a connected call, so check it against your phone log.
- Directions: how many people asked for directions to the business. Less useful for a service-area business with no storefront, but worth watching if you have a yard or showroom.
- Website clicks: taps on the website link. Tag that link with UTM parameters (more on that below) so these visits are easy to pick out in GA4.
- Searches: the terms people used to find the profile. Google updates this at the start of each month, and it can take up to 5 days to appear.
- Views, messages and bookings: profile views on Search and Maps, conversations, and completed bookings if you use a booking provider.
Read the searches list with care. On the lawn care company’s profile, discovery was almost entirely branded. Every non-brand term, including the main lawn care service in [your city] query, sat below the 15-user reporting threshold, so the report gave no real count for it. I don’t report non-brand profile discovery as a win until a term clears it.
Two small setup jobs make the profile and the site easier to read together. Add UTM parameters to the website link on the profile, so GA4 can tell profile visits apart from organic ones. And match the report window to the one you use for Search Console, so calls and clicks cover the same days. For the profile side of the work itself, see local and GMB SEO for service businesses. If you run several branches, each address needs its own profile and its own row in the report, as covered in multi-location SEO.
When National Impressions Are Fine
None of this means you should delete the posts that travel. National informational content does useful things. It builds topical coverage around your services, it attracts the occasional link, and some readers are in your area.
Page One Power published a case where 91% of page entrances on a local business’s informational content came from out-of-state users, yet 72% of conversions came from in-state visitors (Page One Power on nationally ranking local pages). The national traffic didn’t hurt. It just wasn’t where the leads came from.
So keep those posts and link each one to the matching service page. Report them in the content line. What you stop doing is letting their impressions stand in for lead generation. I’ve seen the same pattern at a much larger scale in e-commerce, written up in the blog with fourteen million impressions and almost no buyers.
The one case for pruning: a post whose queries are almost all out of area, that never sends anyone to a service page, and that competes with a service page for the same term. That’s rare on a small contractor site. Check it with step 6 before cutting anything.
Local Impressions FAQ
Why does my local business get Search Console impressions from other states?
Google serves informational and how-to searches nationally, so a page that explains a repair well gets shown across the country. Your pages can also appear for queries where people add their own town to a service term. Those searchers want a contractor where they live, so the impressions can’t turn into calls for you.
Can Search Console show impressions by city or state?
No. The Country filter is the only location filter, and it stops at country. To separate local searches you have to use the query itself: a regex for your towns, county, zip codes and near me terms. GA4 has a City dimension for sessions, estimated from IP address. It only covers visits.
How do I filter local searches in Search Console?
In the Performance report, set Country to your country, exclude brand, then add a Query filter set to Matches regex with your service-area towns, county, zip codes, near me and nearby. Regex filters use RE2 syntax and ignore case by default. Save the pattern and reuse it every month.
Do Google Business Profile views show up in Search Console?
Mostly not. Calls, direction requests and messages happen on the profile and never touch your site. Mobile map pack listings often don’t show a website link until someone taps in, so many of those views don’t register as site impressions. Use the Business Profile Performance report for that layer.
Should I delete blog posts that only get national traffic?
Usually not. They build topical coverage and some readers are local. Link each post to the matching service page and report it as content reach, kept apart from leads. Only consider pruning a post whose queries are almost all out of area and which competes with a service page for the same term.
What should a local SEO report show instead of total impressions?
Local non-brand clicks, clicks to service and location pages, page-one local queries with zero clicks, profile calls, direction requests and website clicks, and leads or booked jobs from your CRM. Total impressions can stay as a footnote with one sentence explaining why most of it is national.
Why are my desktop impressions so much higher than mobile?
On a local service site, a desktop-heavy split with a low click-through rate usually means research traffic, and research travels nationally. On one roofing contractor’s site, desktop had about 70% of impressions at 0.20% click-through, while mobile clicked at 0.52%. It’s a hint, so confirm it with the query and page filters.
Why do my page-one local rankings get zero clicks?
Usually the title and description don’t look like the answer, or the map pack sits above your result and takes the click. Rewrite the snippet to name the service and town plainly, and strengthen the Business Profile, before you build anything new.
Tags: Local SEOGoogle Search ConsoleGoogle Business ProfileSEO Reporting
Written by Ram Kr Shukla
SEO and growth consultant and Fractional Chief Digital Officer with 20+ years in SEO and growth across 50+ brands. Google Analytics and Google Ads certified. Runs Search Console and Business Profile reporting for US home service contractors and 9 US dental practices, and builds the reports that separate local demand from national noise.




