Field notes · 4 September 2026
I read 31 contractor websites. Here is what was broken.
Landscapers, roofers, pool builders and custom home builders across six states. I fetched the markup each server actually sends, counted the defects, and then checked every single one by hand — because six of the things the counting found weren't real, and one of those six was mine.
No names. I don't publish a business next to its faults. Here is the count.
Jordan William · Apex Site Audits · Calgary, Alberta
How this was counted
31 homepages, one per business. 16 landscaping and landscape design, 6 pool builders, 5 roofers, 4 custom home builders. Boise, Colorado Springs, Grand Junction, Billings, Casper, Reno and Spokane.
Fetched 2–4 September 2026. Every number below comes from the HTML the server sent, not from a tool's opinion about it. Median homepage: 163 KB of markup alone, before a single image loads.
Then checked by hand, one at a time. That step is not optional and the section near the bottom explains why.
The count
- 7of 31Stop your phone from zooming inThe page tells the browser
user-scalable=0. Someone who can't quite read your service list can't make it bigger. They don't email to complain. They go back to the search results. - 2of 31Have a link a customer can click that does nothing
href="#"on a real, visitor-facing link. On one site it was Terms of Use, Privacy Policy and the license agreement — all three. On another, a slider button that says Click Here and doesn't. This number was wrong when this page first went up. The last section explains. - 17of 31Give you no way to email them from the homepageNo
mailto:link and no working contact form. If someone doesn't want to phone you at 9pm, there is nothing on the page for them to do. Three more have nomailto:but do have a form, so they aren't counted here. - 14of 31Show a stale copyright year, or none at allSeven show an out-of-date year — the oldest reads 2016. Seven show no year at all. A ten-year-old date is the fastest way to make a customer wonder whether you're still trading.
- 12of 31Have a title tag Google will cut offOver 60 characters, so the end of it disappears in the search result. The longest was 100 characters. That line is the headline of your free ad on Google and half of it is missing.
- 9of 31Have no image for link previewsNo
og:image. When a happy customer pastes your address into Facebook or a group chat, it renders as a gray box. - 5of 31Print a phone number you cannot tapNo
tel:link. Four of them display the number as plain text, so on a phone the customer has to memorize it, back out and dial. One had no phone number anywhere on the site at all. - 8of 31Serve images with no alt text49 images out of 594. On the worst site, 18 of its 21 images. Screen readers announce nothing, and Google is told nothing about the photographs of your own work.
- 8of 31Have the wrong number of top-level headingsTwo pages have no
h1. One has twenty-four. Search engines use that tag to work out what the page is about. - 5of 31Have no canonical tagNothing telling Google which address is the real one, so a site reachable at more than one URL can compete against itself.
- 3of 31Have no description for search resultsTwo more have two of them, which is the same as having none. Google writes its own sentence about your business instead of the one you'd choose.
- 1of 31Has no secure version at allNo HTTPS. Every visitor gets Chrome's Not secure warning next to the address. There has never been a certificate issued for the domain. The fix is free and takes ten minutes.
The expensive ones aren't the technical ones
Nobody leaves a website because of a canonical tag. They leave because they couldn't read it, couldn't tap the number, or weren't sure the business still existed.
The zoom lock is the worst thing on this list and it's a single line of code from a template that shipped years ago. The business owner has never seen it, because it doesn't misbehave on a laptop. It only bites the customer standing in their own backyard trying to read your service list one-handed.
The second worst isn't in the count at all, because it isn't a defect — it's an omission. One of these builders has been trading since 1957 and mentions it once, in the middle of a paragraph, below the fold. Sixty-nine years in one trade in one valley is the single most convincing thing that business owns, and it is a line in a paragraph.
One site was clean
A roofer in western Colorado
Current copyright year, canonical tag, ten Open Graph tags, alt text on all seventeen images, working phone and email links, no zoom lock, no leftover template text, title 59 characters. I went through it twice looking for something to tell them and there wasn't anything worth an email.
That's one in thirty-one. It also means the other thirty are losing work to whoever built that one.
Six things the counting got wrong
This is the part that matters. A scanner will hand you a list like the one above in four seconds, and a good share of it will be false. Every one of these looked like a finding and none of them were. The sixth was mine, and it was live on this page for a day.
The phone number that was a stylesheet
A pattern-match for a placeholder phone number hit (999) 999-9999. It was z-index:999999 in the site's CSS. There was no phone number.
The Lorem ipsum nobody can see
A block of Latin filler text sitting in the markup. It's inside an element the stylesheet sets to display:none. Invisible to every visitor. Telling that owner their site says "lorem ipsum dolor" would have been wrong and they'd have known it.
The duplicate pages that already knew
Two URLs, same content — the classic -2 suffix a CMS leaves behind. Both already carried a correct canonical tag pointing at the original. Nothing to fix.
"Your company" — written by a customer
Template placeholder text usually reads like that. On this site it was inside a genuine review: "I'd recommend your company to anyone." A real sentence from a real person.
The warning that was doing its job
A comment reading do not remove this or risk form bot signups sitting in the middle of a contact form. It's a Mailchimp honeypot, positioned at left:-5000px, off the side of the screen. Working exactly as designed.
And the one I got wrong myself
The first version of this page said 16 of 31 have a link that goes nowhere. That was my own count and it was wrong. Most href="#" links aren't broken at all — they're the top item of a dropdown menu, a cookie banner button, a back-to-top arrow, a gallery filter. They look dead in the markup and behave perfectly on the page.
Counted properly — only links a customer can actually click and read — it is 2 of 31, not 16. The number above has been corrected and this note is staying here. I found it the next morning, doing to my own work what I'd just spent three days doing to thirty-one other people's.
Six false positives, one of them mine. That is the entire difference between a scan and an audit, and it is why this is done by hand and why it takes a day rather than four seconds.
For the avoidance of any doubt: while I was doing this I also found four British spellings on my own website and shipped one of them in an email to an American business. Everybody's site has something. Mine included, twice this week.
Check your own site in ten minutes
All of this is free. None of it needs a tool.
- Try to pinch-zoom your own homepage on your phone.If it refuses, that's the zoom lock. Ask whoever maintains the site to delete
maximum-scale=1, user-scalable=0from the viewport tag. - Tap your own phone number on your phone.If nothing happens, it isn't a link. Every visitor who wanted to call you had to memorize it first.
- Scroll to your footer and read the year.If it isn't this year, fix it now. It takes thirty seconds and it's the first thing a cautious customer checks.
- Search Google for your business name and read your own result.If the blue line trails off in an ellipsis, your title is too long. If the gray line underneath isn't a sentence you wrote, you have no meta description.
- Paste your web address into a group chat.Whatever preview appears is what appears when a customer recommends you. If it's a gray box, you have no
og:image. - Click every link in your own footer.Terms, privacy, careers, the social icons. On two of these sites a real one went nowhere — on one of them it was Terms of Use, Privacy Policy and the license agreement, all three.
That's seven of the twelve findings above, at no cost, in under ten minutes. If you do nothing else after reading this, do the first two.
The other half takes longer.
The rest of it — the duplicated pages, the headings, the thing your site says on a phone that it doesn't say on a laptop, the one paragraph that should be your headline — is what I do for $149. One page, read line by line, every problem written down in order of what it's costing you, with the fix under each one. Back inside 24 hours.
If the document doesn't contain at least three real problems, you don't pay. You keep it either way.
Audit my website — $149Read a complete audit first: a real site, findings untouched, identity redacted →
Or email apexsniperdev@gmail.com and I'll find one problem on your site for nothing.