Your URL is the first thing Google reads about a page.
Before the title tag. Before the H1. Before a single word of your content. The URL is a direct signal to Google — and every AI search system reading your site — about what that page covers.
Most contractor sites waste that signal completely.
See how your URL structure compares to the top competitor in your market — free audit →
What Bad Contractor URLs Look Like
The patterns that kill local rankings:
Generic slugs: /services/service1, /page/47, /p=123. These are meaningless to search engines. Google has to rely entirely on content to figure out what the page is — and it gives less ranking weight to pages where the URL doesn't confirm the content's topic.
Keyword stuffing: /best-affordable-roofing-contractor-akron-ohio-cheap-prices. Google's algorithm penalizes over-optimized URLs. The signal has to be clear, not loud.
Underscores instead of hyphens: Google treats underscores as word joiners, not separators. roof_replacement reads as one word. roof-replacement reads as two. Use hyphens.
Inconsistent structure: Some pages at /services/roofing, others at /roofing-services, others at /what-we-do/roofing. When the structure isn't consistent, Google has a harder time understanding your site's architecture — and that uncertainty costs you ranking points.
Dynamic URLs with parameters: /index.php?service=roofing&location=akron. These can be crawled, but they send zero keyword signal and can cause duplicate content issues if multiple parameter combinations point to similar content.
The URL Pattern That Works
Clean, consistent, keyword-forward. For contractors, the structure that works is:
/services/[service-keyword]
/services/[service-keyword]/[city-state]
/blog/[post-slug]
/areas/[city-state]
Examples for a roofing contractor:
/services/roof-replacement— main service page, covers the full service area/services/roof-replacement/akron-ohio— city-specific page for Akron/services/roof-replacement/cleveland-ohio— city-specific page for Cleveland/services/roof-repair— separate service, separate URL/services/storm-damage-cleanup— another service/blog/how-to-know-when-you-need-a-new-roof— blog post, full descriptive slug/areas/northeast-ohio— area hub page
Every URL tells Google what it covers. No ambiguity. No wasted characters.
The Three URL Rules
1. Lowercase, Always
URLs are case-sensitive on most servers. /Services/Roof-Replacement and /services/roof-replacement can technically be treated as two different URLs — creating duplicate content issues. Use lowercase for everything.
2. Hyphens, Not Underscores
/roof-replacement → Google reads: roof + replacement = two separate words ✅
/roof_replacement → Google reads: roof_replacement = one compound word ✗
This has been confirmed by Google for over a decade. Hyphens are word separators. Underscores are not.
3. Drop the Filler
Stop words (a, an, the, and, of, for, in) add length without adding ranking signal. Compare:
/services/tips-for-finding-the-best-roofing-contractor-in-akron (60 chars, diluted signal)
vs.
/services/roofing-contractor-akron-ohio (39 chars, clean signal)
The second URL sends a stronger, clearer keyword signal. Shorter is better when the core keywords are still there.
City Pages: The URL Decision
If you've built city pages — and you should have them — the URL structure matters more than anywhere else on the site.
Two patterns work:
Pattern A — Under the service:
/services/roof-replacement/akron-ohio
/services/roof-replacement/cleveland-ohio
/services/roof-replacement/canton-ohio
Pattern B — Under the city:
/areas/akron-ohio/roof-replacement
/areas/cleveland-ohio/roof-replacement
/areas/canton-ohio/roof-replacement
Pattern A is better for service-first sites (you want to rank for the service, the city is a modifier). Pattern B is better for area-first sites (you're the go-to contractor in specific cities and want Google to read you as locally dominant).
Pick one. Stick with it. Don't mix — /services/roofing/akron and /areas/cleveland/roofing on the same site creates a structure Google can't fully parse.
How to Fix Existing URLs Without Losing Rankings
If your site has been live for years with bad URLs, there's a right way to fix it.
Step 1: Audit before you touch anything.
Check which pages are actually ranking. Google Search Console → Performance → Pages. Any page getting impressions or clicks has built some authority. Those pages need 301 redirects before you change their URLs — or you flush that authority.
Step 2: Set up 301 redirects.
A 301 (permanent) redirect tells Google: "This page moved permanently. Give its ranking credit to the new URL." About 90-99% of the original page's authority transfers.
In Next.js (which most VibeTokens sites run on):
// next.config.js
module.exports = {
async redirects() {
return [
{
source: '/services/service1',
destination: '/services/roof-replacement',
permanent: true,
},
]
},
}
For WordPress: use the Redirection plugin. For other platforms, check your .htaccess or _redirects file.
Step 3: Update internal links.
After setting up redirects, update your navigation, footer links, and any inline links within your content to point directly to the new URLs. Redirects pass authority, but direct links are cleaner — they don't add a redirect hop.
Step 4: Submit to Google Search Console.
After making the changes, submit your sitemap and use the URL Inspection tool to request re-indexing of the new URLs. Google will discover them through crawling eventually, but this speeds it up.
AI Search and URL Structure
AI search systems (ChatGPT, Perplexity, Google's AI Overviews) parse your site the same way traditional search does — but URL structure matters even more for them because they're looking for clear, explicit signals about what each page covers.
When Perplexity crawls your site to build an answer about "best roofing contractors in Akron," a page at /services/roof-replacement/akron-ohio with a matching H1 and clear content structure is far more likely to get cited than a page at /services/7 that contains the same information.
Clean URLs are part of the same signal stack as schema markup, title tags, and H1 structure. They're all telling the same story — this page is about this specific thing — from different angles.
The On-Page SEO Foundation
This is the fifth and final post in the on-page SEO series for contractors:
- Title Tags — the #1 on-page ranking signal
- Meta Descriptions — write for clicks, not rankings
- H1 Structure — the page's topic declaration
- Internal Linking — how Google understands your site structure
- URL Structure — the first signal Google reads ← you're here
Get all five right and you have a technical foundation that compounds. Most of your competitors have none of them dialed in.
Run a free audit that checks your on-page SEO against your top local competitor →
