TL;DR
Run every city page through these 15 checks across eight categories: content uniqueness, local proof, NAP, internal links, schema, title/H1, reviews, and photos. A page that passes all 15 is defensible in competitive Massachusetts markets. A page that fails more than four is likely invisible.
How to use this checklist
This post is the companion to Service Area Pages for Massachusetts Contractors: Examples That Work, which shows you what good looks like. This post gives you the audit tool to check what you already have.
Work through each item on every city or town page on your site. Some items are pass/fail. Others are scored on depth. A page that earns a "pass" on every item has the structural foundation to compete in local search. A page with multiple failures is either invisible or actively working against your rankings.
Each item includes three parts: What to check (the specific signal to inspect), Why it matters (the ranking or conversion reason), and How to fix it (a concrete action if it fails).
The checklist covers eight categories: content uniqueness, local proof, NAP consistency, internal linking, schema markup, title tag and H1, reviews, and photos. That sequence mirrors the order in which Google processes and weighs the signals on a local service page.
Category A: Content Uniqueness
Thin and near-duplicate content is the most common failure on contractor city pages. Google's spam policies explicitly flag "doorway pages" -- pages that exist solely to funnel users to a parent page without offering location-specific value. The fixes in this category are the ones that most directly prevent algorithmic suppression.
Item A-1
Does this page contain at least 400 unique words?
What to check
Paste the page text into a word counter or use the browser console: document.body.innerText.split(/\s+/).length. Count only the visible body copy on the page -- not navigation, footer, or boilerplate sidebar text.
Why it matters
Pages under 300 words rarely earn ranking real estate in competitive local markets. Google's quality rater guidelines define "low quality" partly by thin content. For Massachusetts contractors targeting multiple cities, 400 words is the practical minimum where Google stops treating a page as thin.
How to fix
Add content specific to the town: the local permit office name, a named neighborhood or landmark, the typical housing stock, and one real project example with a street-level detail like "the older triple-decker in the Burncoat neighborhood." This adds 150 to 250 words that cannot be copied from another city page.
Item A-2
Is less than 60% of this page's body copy shared with another city page?
What to check
Copy the body text from two different city pages and paste both into a free plagiarism checker such as Copyscape's free tool or the Diffchecker at diffchecker.com. Review the percentage match.
Why it matters
Near-duplicate content across city pages signals a doorway page set. Google consolidates these in its index and suppresses the weaker copies. Even a page that passes the 400-word minimum fails if 80% of those words are identical to another city page.
How to fix
Identify the shared boilerplate blocks and treat them as a partial. Write the unique sections -- local context, project examples, regulatory notes -- as the primary body. Boilerplate can remain but should not dominate word count.
Item A-3
Does the page include at least one town-specific fact that cannot be sourced from another page on your site?
What to check
Read the page and identify one sentence that could not appear verbatim on a page for a different town. Examples: a specific local permit fee, the name of a local inspector, a housing characteristic unique to that city's stock.
Why it matters
This is the "can a homeowner in this specific town learn something here?" test. If the answer is no, the page is a template. Google's helpful content guidance asks whether content demonstrates first-hand expertise. A single town-specific fact grounds the page in real local knowledge.
How to fix
Look up the town's building department for a permit fee schedule. Reference the Massachusetts Home Improvement Contractor registry as a local resource. Mention a housing characteristic specific to that city: Quincy has a high density of multi-family brick construction; Sudbury has a large share of pre-1960 single-family wood-frame homes.
Category B: Local Proof
Local proof is the evidence that your business has actually worked in this town, not just that you are theoretically willing to. For a homeowner in Natick deciding between two contractors, specific local references on a page convert better than generic claims of service area coverage.
Item B-1
Does the page mention at least one local landmark, neighborhood, or street name?
What to check
Scan the page body for named geographic references beyond the city name itself. Examples: "Saxonville neighborhood in Framingham," "near the Wachusett Reservoir in Princeton," "in the Quinsigamond Village area of Worcester."
Why it matters
Neighborhood references are co-occurrence signals. When a roofing page also mentions Grafton Hill and Burncoat, those co-occurrences strengthen topical relevance for Worcester searches. They also build homeowner confidence: a contractor who names the specific neighborhood has clearly been there.
How to fix
Use Google Maps to find the named neighborhoods for the city. Add one or two in natural context: "We've done work in the Indian Hill and Kenberma sections of Scituate" or "Our crews cover the north end of Fitchburg near Whalon Lake."
Item B-2
Does the page reference local permits or the town's building department?
What to check
Search the page text for the words "permit," "building department," "inspectional services," or the name of the specific municipal department. The reference should link to or name the actual local office.
Why it matters
Permit references signal operational legitimacy to homeowners who have dealt with unlicensed contractors. They also create topical locality: the Framingham and Worcester inspectional services departments are different entities, and referencing the correct one places your page in that city's information ecosystem.
How to fix
Find the building department URL for the city and add one sentence: "Work in [City] requires a permit through the [Department Name]; we handle the application as part of every project." This line cannot be copied to another city page without updating it.
Category C: NAP Consistency
NAP stands for Name, Address, Phone. Consistency of these three data points across your website, Google Business Profile, and all directory listings is a confirmed local ranking signal. A service area page with conflicting NAP data actively damages local pack performance.
Item C-1
Does the phone number on this page exactly match your Google Business Profile primary phone?
What to check
Open your Google Business Profile, note the primary phone number. View-source on the city page and search for the phone number. Check both the visible display and the schema markup. Confirm the formats match: if GBP shows 857-233-8382, the page should show 857-233-8382 (not (857) 233-8382 or 8572338382).
Why it matters
Google aggregates NAP data from your website, GBP, and third-party directories. Conflicting formats lower Google's confidence in your business data, depressing local pack eligibility. Phone format is the simplest NAP check and the most often violated.
How to fix
Standardize on one phone number and one format site-wide. Update the schema, visible footer, and in-body contact sections. Then audit your top directory listings (Yelp, Angi, HomeAdvisor, BBB, Houzz) for the same format.
Item C-2
Is your business address (if displayed) in the same format as your GBP?
What to check
If your site shows a street address anywhere on the city page or in the footer, compare it character-by-character against your GBP address. Common mismatches: "St" vs "Street," "Suite" vs "Ste," abbreviated state vs. spelled-out state, ZIP+4 vs ZIP only.
Why it matters
Conflicting address data dilutes the local signal for the same reason as phone format. For service-area businesses that hide their address in GBP, this check applies only to the footer and contact page, where the address may still appear.
How to fix
Choose one canonical address format and apply it everywhere: footer, contact page, and every schema block. If you hide your address in GBP as a service-area business, remove the street address from all public-facing pages.
Category D: Internal Linking
Internal linking does two things for service area pages: it passes authority between related pages, and it tells Google how your site's geographic coverage connects. A city page that exists in isolation, with no links to or from the rest of your site, is essentially orphaned. Google will crawl it but won't weight it heavily.
Item D-1
Does this page link to at least two adjacent city pages or service category pages?
What to check
View the page and count outgoing links to other pages on your own site. Focus on links in the body copy and any "related cities" or "service area" navigation blocks. Links in the global footer count but do not fully substitute for contextual in-body links.
Why it matters
A Marlborough page that links to Worcester and Hudson signals a coherent service territory. Google uses the internal link graph to understand geographic coverage. A page with no outbound internal links is topically isolated and treated as a lower-authority leaf node.
How to fix
Add a "Nearby towns we serve" section with two to four links to adjacent city pages. Use descriptive anchor text: "roofing contractor in Hudson" not "click here." Also confirm your service-category pages link back to the city page.
Item D-2
Is this page linked from at least your homepage and one other relevant page?
What to check
Use your browser or a tool like Screaming Frog (free for up to 500 URLs) to check which pages on your site link to this city page. At minimum, the homepage service area section and one category page should link here.
Why it matters
PageRank flows through internal links. If your homepage does not link to your Worcester city page, that page gets no authority transfer from your strongest asset. Orphaned pages consistently underperform linked pages in local rankings, even when content is equivalent.
How to fix
Add the city to your homepage's service area section. Ensure the service category page links to all city variants. For sites with 10 or more city pages, a dedicated "Service Areas" index page creates a clean hub-and-spoke structure.
Category E: Schema Markup
Structured data is not a direct ranking factor, but it helps Google understand what your page is about and can trigger rich results in local searches. For contractor city pages, the absence of schema is a missed signal that competitors with schema are capturing.
Item E-1
Is LocalBusiness schema (or an industry-specific subtype) present on this page?
What to check
View-source and search for application/ld+json. Look for "@type":"LocalBusiness" or a recognized subtype: Plumber, RoofingContractor, HVACBusiness, Electrician, GeneralContractor. Validate the block at Google's Rich Results Test.
Why it matters
LocalBusiness schema is the primary mechanism for confirming to Google that your page represents a local business serving a geographic area. Without it, Google infers your business type and location from on-page text alone. With it, you give Google explicit, machine-readable confirmation that can trigger local knowledge panel data and map integrations. The Google Developers documentation on LocalBusiness schema shows the exact fields that matter most.
How to fix
Add a JSON-LD block to the page head that includes at minimum: @type, name, telephone, url, and areaServed with the specific city. Use the most specific subtype available for your trade. If you handle multiple trades, nest a Service schema inside the LocalBusiness using hasOfferCatalog.
Item E-2
Does the schema telephone field match the visible phone number on the page?
What to check
Extract the "telephone" value from the JSON-LD block. Compare it to the phone number visible in the page body or footer. The schema format should use E.164: +18572338382. The visible format should be readable: 857-233-8382. Both should resolve to the same number.
Why it matters
A schema telephone that differs from the visible phone creates a conflicting NAP signal. If the two formats disagree, neither gets full credit in Google's local algorithm.
How to fix
Update the schema telephone field to E.164 format and confirm the visible phone matches. Re-run the Rich Results Test to confirm no validation errors.
Category F: Title Tag and H1
The title tag and H1 are the two highest-weighted on-page signals for telling Google what a page is about. For local contractor pages, the city name in both is non-negotiable.
Item F-1
Does the title tag include both the city name and a service keyword?
What to check
View-source and check the <title> tag. Both the city name (e.g., "Worcester") and a primary service keyword (e.g., "Roofing Contractor," "Plumber," "HVAC") should appear in the first 60 characters, before the brand name. Example of a passing title: "Roofing Contractor in Worcester, MA | YourBrand."
Why it matters
The title tag is the most important on-page ranking factor for local queries. A title that omits either the city or the service keyword misses the compound query homeowners type. Google rewrites poorly optimized titles, but that rewrite may not use your preferred terms.
How to fix
Rewrite the title to: [Service] in [City], MA | [Brand]. Keep it under 60 characters. One service keyword and one city is sufficient -- no stuffing. For pages covering two adjacent cities, pick the primary city for the title.
Item F-2
Does the H1 include the city name?
What to check
Find the <h1> tag. Confirm the city name appears in it. There should be exactly one H1 per page. If the H1 matches the title tag exactly, that is acceptable but not ideal; a slightly varied phrasing that incorporates a secondary keyword can broaden topical coverage.
Why it matters
The H1 redundantly confirms the page's primary topic alongside the title. A city page whose H1 reads "Trusted Contractors Serving Your Community" is wasting the most visible heading on the page.
How to fix
Rewrite the H1 explicitly: "Roofing Contractor Serving Worcester, MA" or "HVAC Repair and Installation in Framingham." If the page has multiple H1 tags (a common CMS error), consolidate to one.
Category G: Reviews
Customer reviews embedded on city pages create several simultaneous benefits: fresh content signals, social proof for homeowners, and geographic specificity when reviewers mention the town by name. A city page with no review content is a missed conversion and a missed signal.
Item G-1
Does this page display at least one customer review from someone in this city or region?
What to check
Inspect the page for a testimonial or review section. Confirm at least one review names the city or a nearby town in its text, or is attributed to a customer identified as being in that area. A generic review without any local context does not pass this item.
Why it matters
Reviews with geographic references contribute local co-occurrence signals. A review mentioning the Indian Lake neighborhood of Worcester adds geographic depth that body copy alone may not provide. A recognizably local review also carries more trust weight with homeowners.
How to fix
Ask recent customers to mention their neighborhood or a nearby landmark in their review. Pull city-specific reviews onto the corresponding page. If using an aggregating review widget, filter it to show reviews from customers in or near that city.
Category H: Photos
Photos are among the highest-converting elements on a local contractor page. Stock images are a trust signal in reverse: they tell homeowners you have not done enough local work to have real job photos. Real job photos with location context serve both ranking and conversion goals.
Item H-1
Does this page show at least one real job photo from this city or region?
What to check
Review all images on the page. Are they stock photos (people in hard hats, generic house) or photos of actual work performed? Ideally, at least one photo includes a caption that names the city or a recognizable local reference.
Why it matters
Real job photos signal genuine local work history. For homeowners, a before-and-after photo of a Worcester three-decker does more conversion work than any marketing copy. Photos also add engagement signals that Google measures through interaction rates.
How to fix
At the next job in each target city, photograph the completed work and file by city. Add photos with descriptive alt text: "New asphalt shingle roof installation, Grafton Hill neighborhood, Worcester MA." One real photo per city page is a meaningful improvement over stock imagery.
Item H-2
Do image alt attributes describe the work and location, not just the service type?
What to check
View-source and find the alt attributes for every <img> on the page. Check whether they include a location reference or are generic ("roof replacement," "plumbing contractor"). Generic alt text passes accessibility requirements but misses local SEO value.
Why it matters
Alt text tells Google what an image shows. A photo with alt="roof replacement Framingham MA" adds a geographic keyword instance without affecting visible word count. Across four to six images, location-specific alt text adds meaningful co-occurrence signal.
How to fix
Rewrite every alt attribute to follow the pattern: [service action] + [location context]. Example: "asphalt shingle installation on colonial home, Northborough MA." Keep alt text under 125 characters and factually descriptive.
Scoring Your Pages
There are 15 items across the eight categories. Score each item as Pass (1 point) or Fail (0 points). Here is how to interpret your results:
- 13 to 15 passes: The page is structurally sound and competitive. Maintain it; do not let it drift.
- 9 to 12 passes: The page has ranking potential but specific gaps are holding it back. Address the Fail items by category priority: content and NAP issues first, then schema, then media.
- 5 to 8 passes: Significant work required. The page is likely suppressed or ranking well below its potential. Treat it as a rewrite, not a patch.
- Under 5 passes: The page is doing active harm. It may be cannibalizing a stronger page, creating thin-content signals site-wide, or creating NAP conflicts. Consider removing it until it can be rebuilt correctly.
For a deeper look at what fully built-out service area pages look like in practice, the companion post Service Area Pages for Massachusetts Contractors: Examples That Work walks through real-world before-and-after structures for multiple trade categories. Use that post alongside this checklist -- the examples show the end state, the checklist tells you where you currently are.
If you want a professional review of your current city pages against this checklist, a free site audit covers service area page structure, schema validation, NAP consistency, and internal link mapping as part of the standard review.
Available in Portuguese: Páginas de área de atendimento que posicionam empreiteiros de Massachusetts.