I reviewed a brand-new handyman site recently. Clean build, fast, good security headers, decent content across a home page, a services page, and a page for each trade. In a browser it looked ready to launch. Then I looked at it the way Google and an AI answer engine actually look at it, and almost none of it was there.
That gap, between a site that looks finished to its owner and one that is legible to the machines that bring a local trade its customers, is now its own check in the Mega Analyzer. When it detects a handyman / home-repair / home-services business (trade keywords like plumbing, electrical, painting, drywall, carpentry; "licensed, bonded, insured"; "free quote"; a service area; or LocalBusiness / HomeAndConstructionBusiness schema), it runs a local-service readiness pass. Here is what it checks and why each one decides whether the phone rings.
The trap that beats everything else: a site that is invisible without JavaScript
The site I reviewed was a client-rendered single-page app. The raw HTML the server sent was a near-empty shell, about a hundred words; the real content, around 4,000 words across the pages, only appeared after the browser ran JavaScript. To a person, fine. To a crawler that does not run JS, to a link preview when someone texts your site to a friend, and to many AI answer engines, every page was blank.
For a "handyman near me" business whose entire discovery is search, the local map pack, and AI answers, that is the single most damaging thing that can be wrong, and it is invisible to the owner because it looks perfect in their browser. So the check now compares the raw HTML to the rendered content and flags the SPA-invisibility trap directly. The fix is to prerender or server-render the pages (Netlify prerendering, a static pre-render at build time, or framework SSR) so the content and the structured data ship in the initial HTML. Everything else on this list is wasted until the machines can read the page.
The LocalBusiness node is how a trade gets placed on the map
Google's local pack and AI answers identify and rank a local business primarily from three things: a LocalBusiness node in your schema, a Google Business Profile, and consistent name/address/phone across the web. The site I reviewed had zero LocalBusiness schema, while nine of the twelve competitors I benchmarked shipped it.
The check looks for the full local entity: a HomeAndConstructionBusiness / LocalBusiness node with a telephone (and a matching tel: click-to-call link), a PostalAddress or, for a service-area business with no storefront, an areaServed list of the cities you cover, geo coordinates, openingHoursSpecification, and a sameAs that points at your Google Business Profile and socials. A service-area handyman who skips areaServed is invisible to every surrounding-city search.
It also rewards a near-open lane: a Service node per trade (serviceType handyman, plumbing, electrical, painting, drywall, carpentry) with its own areaServed. Almost no competitor ships this, and it is exactly how an AI answer maps "who does drywall repair in my town" to a specific business.
Google Business Profile is the lead source, not a nice-to-have
For a handyman, the Google Business Profile is the single biggest source of calls and the engine that collects reviews and powers the map pack. The check flags the absence of any Google Maps or Business Profile link, because for this trade a website without a Business Profile behind it is a brochure, not a lead machine. Create it, verify it, fill it completely with services, service area, hours, real photos of your work, and Q&A, and make the name, address, and phone match the site exactly.
The placeholder-phone trap
Here is a small check that catches a surprisingly common, embarrassing problem. Template and demo sites ship with fake "555-01xx" phone numbers, which are reserved for directory and fictional use. If one of those is still on the live site, the business is advertising a number that cannot receive calls, and it signals "unfinished" to anyone who notices. The check flags any 555-01xx number so it gets replaced with the real one everywhere it appears, visible text, schema, and Business Profile, all identical.
Reviews, handled honestly
Reviews are the top trust and ranking signal for a local trade. The check flags two situations: a site that claims "5-star" or "highly rated" but has no machine-readable AggregateRating (the stars are invisible to search), and a site with no review program at all. The fix order matters: drive real reviews through the Google Business Profile first, then emit AggregateRating with the real count once they exist. It will not tell you to fabricate a rating, because the FTC's consumer-review rule (16 CFR Part 465) makes fake or incentivized reviews unlawful, and the machine-readable number carries the same liability as the visible claim.
The licensing guardrail
This is the one that protects the owner. The check notices when a site advertises "licensed, bonded, and insured" alongside plumbing, electrical, or HVAC work. In most states a general handyman license does not cover those trades; they are separately state-licensed, and advertising them without the trade license is both an enforcement risk and a liability risk. The finding is not a verdict, it is a prompt: confirm the actual license held, name the license type or number where the city requires it, and either hold the trade license, limit those pages to clearly minor non-licensed scope, or disclaim and refer. The same goes for "15 years" and "5-star": every trust claim has to be substantiable before it goes live.
The quieter ones
The check also covers Person schema for the owner (for an owner-operated trade, the named person is the brand and a real photo plus a Person node is a top conversion driver), FAQPage on the service pages (the surface AI Overviews lift for "how much does a handyman cost / do you do small jobs / are you licensed"), Open Graph tags so a shared link renders properly instead of as a bare URL (referrals are how handymen grow), and a sitemap signal, which matters most right after a domain move.
How to use it
Run your site through the Mega Analyzer. If it detects a home-services business you will get the handyman readiness card with a copy-ready fix prompt that walks through the fixes in order, crawlability first, then the local business node, then the Business Profile. Validate the schema with the Schema Validator.
If you are a tradesperson building your own site, none of this needs an agency. It is a prerender setting, a block of JSON-LD, a free Google Business Profile, and honest copy. That self-reliant, do-it-with-free-tools approach is the whole thesis of my book The $20 Dollar Agency.
Fact-check notes and sources
- schema.org
LocalBusiness,HomeAndConstructionBusiness,Service,areaServed,openingHoursSpecification: schema.org/LocalBusiness - Google local business structured data + Business Profile ranking: developers.google.com and support.google.com/business
- Google guidance on JavaScript SEO / rendering (why client-only rendering hurts discovery): developers.google.com
- FTC Rule on Consumer Reviews and Testimonials, 16 CFR Part 465 (2024): ftc.gov
- 555-01xx as reserved fictional phone numbers (NANPA): nationalnanpa.com
Related reading
- The Mega Analyzer now reads DTC stores: making your shop legible to AI shopping
- Cross-platform brand presence: the sameAs breadth that makes a business citable
- The ProfilePage and mainEntity binding that AI Mode actually reads
This post is informational, not legal advice. Trade-licensing and advertising rules vary by state and municipality; confirm your local rules before publishing trust claims. Any business reviewed was either my own, a site I was given permission to use, or anonymized as "a site I was asked to review."