How to create a site-by-service Matrix
Step 1: List all your services.
Make the list as comprehensive as possible. For this example, we’ll just list 5 services. Keep in mind, a typical trades business has 8 to 15 distinct services worth a dedicated page.

Step 2: List your service areas across the columns.
This is a comprehensive list of every suburb you service or want to service. For a plumber based in the suburbs of Dallas-Fort Worth that may look like below. Again, to keep it simple I’ve just listed 5 cities. That brings the total grid to 25 potential URLs (5 x 5). However, not all of these city - service combo has real demand.

Step 3: Check the cells with real demand
There are three sources of signal.
- Your job log. Every cell where you have actually completed a job in the last 12 months has real demand.
- Google Trends and Google Keyword Planner. Search volume for "service + suburb" tells you whether queries are happening.
- Local competitor coverage. Look at the businesses currently ranking for the queries you care about. If they have dedicated pages for the cell, the demand is real.
Mark the cells that have demand. Most matrices end up with 30 to 60 viable cells.
Step 4: Dedicate a URL to each viable cell
Build a page for each viable cell with the URL pattern /service/suburb/. For example: /water-heater-repair/plano/ or /drain-cleaning/frisco/. The page should be about exactly the service in exactly the suburb, and nothing else.
Expert Tips
The 100,000-population threshold
Not every suburb should get its own page. The clearest rule for cadence is to create a dedicated page per every 100,000 people. Suburbs with populations above 100,000 have enough native search volume to support dedicated service pages.
For areas below 100,000 people, group regionally. Smaller DFW suburbs such as Mansfield or Cedar Hill often do not have enough query volume to support a dedicated page per service. Group 3 or 5 neighboring small suburbs into a regional page like “Drain Cleaning in South Tarrant County”. The regional page must name each suburb that you are trying to target. That way, your webpage will get enough cumulative query volume to rank, and avoids the thin-content trap.
Frequently asked questions
What exactly is a site-by-service matrix?
A grid. Your services run down the left-hand side, the places you work run across the top, and each cell is a potential page — one service, in one place. Ticking the cells with genuine demand turns a vague intention to "do local SEO" into a finite, countable list of pages to build, in priority order.
Won't dozens of near-identical location pages get me penalised?
They will if they are near-identical, and that is the real risk here. Google's spam policies target scaled content created primarily to manipulate rankings rather than to help people, and a template with the suburb name swapped in is exactly that pattern. The protection is substance: a unique opening, a real local detail, a job you actually did there, a customer from that area. Pages that pass that bar are not the thing the policy is aimed at.
Where does the 100,000-population figure come from?
It is a UI Compass planning heuristic, not a Google rule and not a published industry standard. We use it because it is a cheap, checkable proxy for "is there likely enough native search volume here to support a dedicated page." Treat it as a starting filter and then override it with real evidence — your own job log for a suburb beats any population figure.
How do I decide which cells to build first?
Order by evidence of demand, not by grid position. Cells where you have completed a job in the last twelve months come first, because the demand is proven. Then cells where competitors already run a dedicated page, which tells you someone has found the query worth the effort. Then everything supported only by keyword-tool volume. Your top few services in your top few suburbs usually deliver most of the benefit long before the grid is finished.
What goes on a service-plus-suburb page so it is not thin?
Answer the question the searcher actually has. What the job involves in that area, what it typically costs and what changes the price, how quickly you can get there, a genuine local reference point, one job you have done nearby, and a clear way to make contact. If you cannot write something about the cell that would not be equally true of the neighbouring suburb, the cell probably belongs in a grouped regional page instead.
Does the matrix replace my Google Business Profile?
No — the two do different jobs and reinforce each other. Your profile anchors the business to its physical address. The matrix pages cover the surrounding areas that address does not, in the customer's own words. Both need the same name, address and phone in the same format everywhere, or you are asking Google to reconcile signals that do not match.