One indexable canonical per URL
Every page declares one rel=canonical pointing to itself (or a chosen primary). No competing canonicals, no canonical loops, no canonicalizing to a noindex page. Verify in Search Console's URL Inspection tool.
Every checkpoint we run on a local-business site before it's allowed to launch. Technical, on-page, local, authority — in order.
Every page declares one rel=canonical pointing to itself (or a chosen primary). No competing canonicals, no canonical loops, no canonicalizing to a noindex page. Verify in Search Console's URL Inspection tool.
Sitemap.xml lists every indexable URL. Robots.txt doesn't accidentally block your blog or service pages. Both submitted in GSC and showing 0 errors in the Coverage report.
Test with Chrome DevTools' device toolbar at 360px, 414px, 768px, and 1280px. No horizontal scroll, no overlapping tap targets, no fonts under 16px on form inputs (iOS auto-zooms).
LCP < 2.5s, INP < 200ms, CLS < 0.1 — measured on real users in Chrome User Experience Report, not just lab data. PageSpeed Insights shows both; the field data is what Google ranks on.
Title under 60 chars, description under 155 chars, both written for humans. Front-load the keyword. No 'Home — Acme' titles. Use Screaming Frog or Sitebulb to find duplicates.
H1 contains the primary keyword and reads like a human wrote it. H2s break the page into searchable subtopics. Don't use heading tags purely for styling — that's what classes are for.
LocalBusiness (with the right subtype: Plumber, HVACBusiness, RoofingContractor, Dentist, etc.) on the homepage. Service schema on each service page. FAQPage where you have an FAQ. Validate via Schema.org's Rich Results Test.
AVIF or WebP for content images. loading="lazy" on everything below the fold. Alt text describes the image meaningfully — "plumber repairing kitchen sink" beats "plumber.jpg".
Business name, address, phone match the website exactly (NAP consistency). Primary category is the most specific match (Emergency Plumber > Plumber > Home Services). All service categories filled. Photos within the last 30 days. Posts weekly.
If you serve 8 suburbs, you need 8 service-area pages — each with the city in the URL, title, H1, and locally-relevant content. Not the same template with the city name swapped — that's spammy doorway content.
Yelp, BBB, Angi, Houzz, your industry directories (e.g. HomeAdvisor, Thumbtack). Name/address/phone must match exactly across all of them. Use Whitespark or BrightLocal to audit. Inconsistent citations kill local-pack ranking.
Target 5-10 net-new Google reviews per month. Set up a review-request workflow (text message after job completion is highest-converting). Respond to every review within 48 hours — including the negative ones, especially the negative ones.
Local chamber of commerce, industry association, suppliers, vendors, charity sponsorships, news mentions. Don't buy links — earn them by being a real business that does things in your community.
Not AI-generated filler. Real answers to questions your customers actually ask (mine your phone calls + Reddit + Quora). 800+ words, internal links to service pages, an actual point of view. Two posts/month minimum.
One email a month. Real teardowns of local-business websites, what they ranked for, and what we'd change. No spam.
Senior SEO strategist + technical audit + prioritized fix list. Free.
Request a free SEO audit