Technical SEO Audit · Document № 2026-0610 Status: Findings Issued

Site Inspection
Report. SEO Edition

https://www.homeprocontractor.com

Client — HomePro Contractors, LLC Inspected — June 10, 2026 Platform — Duda Pages crawled — 23
ACTION
REQUIRED
1 critical · 4 high

The structure is sound; the migration leaked. The new Duda site has genuinely solid on-page fundamentals — unique titles, clean canonicals, healthy sitemap, valid local-business schema. But the move off WordPress shipped without a redirect map, so URLs Google still ranks are returning 404 and bleeding link equity. Patch that first, then complete the schema, fill the service-area coverage gaps, and put the front-end on a diet.

IndexabilityPass

All 22 sitemap URLs return 200; canonicals correct site-wide.

MigrationFail

Legacy WordPress URLs still indexed by Google 404 on the new site.

Local SEOPartial

Schema present but address incomplete; no NAP in page HTML.

Page WeightHeavy

300 KB HTML, 6 font families, no srcset, minimal lazy-loading.

FINDING 01

Migration 404s

Critical

Google is still serving the old WordPress site's URLs in search results — and they're dead. Every one of these is a page that earned rankings and backlinks, now returning a hard 404. This is active, ongoing loss.

Legacy URL (still indexed)Current statusShould 301 to
/contact-us/404/contact
/roofing-prince-fredrick-maryland/404/service-area/prince-frederick-md
/roofing-homepro-prince-frederick-maryland/404/service-area/prince-frederick-md
/roofing-pros-frederick-maryland/404/roofing-replacements-and-repairs
/about-us/200— slug happened to match
Sample surfaced via live Google results, June 10 2026. The full inventory will be longer.
Fix

Pull the complete old-URL list from Google Search Console (Pages → Not indexed → Not found 404), then add 301 redirects in Duda under Site Settings → URL Redirects, mapping each legacy URL to its closest live equivalent. One sitting, permanent recovery of whatever equity remains.

FINDINGS 02–05

High-Impact Items

High

Incomplete LocalBusiness schema

JSON-LD · RoofingContractor · sitewide

The structured data is a strong start — areaServed (6 cities), opening hours, phone, email, and five resolving sameAs profiles are all present. But the address stops at "Prince Frederick, Maryland." The full NAP is public on Yelp: 5240 Cutter Ct Ste 103, Prince Frederick, MD 20678. The street address also never appears anywhere in the page HTML, which weakens local-pack consistency signals.

Fix

Add streetAddress, postalCode, addressCountry, geo, and priceRange to the schema; add the full NAP to the site footer; add aggregateRating once review markup is sourced.

Service-area pages are a one-service-per-city patchwork

/service-area/* · 6 city pages

Each city page targets a different single service — so a search like "roof replacement Waldorf MD" has no matching page at all. The Annapolis page (general roofing services) is the right model; the rest cover one cell each of a 5×6 matrix:

City pageCoversCoverage gap
Prince FrederickRoof replacementinspections · coatings · gutters · storm
WaldorfRoof inspectionsreplacement · coatings · gutters · storm
Silver SpringRoof coatingsreplacement · inspections · gutters · storm
La PlataGuttersreplacement · inspections · coatings · storm
Fort WashingtonStorm damagereplacement · inspections · coatings · gutters
AnnapolisAll roofing services— correct template
Building out the service × city matrix is the largest organic-growth lever available.

Also: the /service-area hub itself is thin at ~178 words.

/contact missing from sitemap.xml

sitemap.xml · 22 URLs listed

The contact page is live, linked in navigation, and properly canonicalized — but absent from the sitemap. Separately, every URL declares priority 1.0, which flattens the signal entirely.

Fix

Add /contact to the sitemap; tier priorities if Duda allows (home/services 1.0, cities 0.8, blog 0.6).

Duplicate H1 on the homepage

/ · two <h1> elements

"Trusted Roofing Contractors Serving Southern Maryland" is a good primary H1 — but "Financing options available!" is also marked up as an H1. Heading structure below it is shallow: one H2 across ~1,150 words.

Fix

Demote the financing banner to an H3 or styled text; break the homepage body into keyworded H2 sections (services, service area, why-us, financing).

FINDINGS 06–09

Medium Priority

Medium

Front-end weight

Performance · homepage

Homepage HTML alone is 300 KB with 62 KB of inline CSS across 15 <style> blocks. The font request pulls six families (Anton, Raleway, Roboto, Montserrat, Poppins, Oswald) — most Duda templates actively use two or three. Images ship as 1920-wide JPG/PNG with no srcset and a single loading="lazy" attribute; only 3 webp references found.

Fix

Prune unused families in Duda theme settings, re-export gallery imagery as webp, and run PageSpeed Insights to baseline Core Web Vitals (keyless API quota blocked automated measurement during this audit).

Empty image alt attributes

/ · 3 content images

Three homepage gallery images (template leftovers, IDs 1541778943, 1266163065, 1340604030) carry alt="". A site-wide alt pass is warranted since these originated from the template.

Unclaimed schema opportunities

/faqs · blog articles

The FAQs page (~845 words of genuine Q&A) is a textbook FAQPage markup candidate. The three blog posts — well-targeted at "{service} in {city}" queries — should carry BlogPosting markup.

Case-sensitivity duplicates (contained)

URL handling

/About-Us serves 200 instead of redirecting to lowercase — but the canonical correctly points to /about-us, so the risk is contained. No action strictly required.

VERIFIED

What's Already Sound

Pass
REMEDIATION

Order of Attack

  1. Build the 301 redirect mapPull legacy URLs from Search Console → Duda URL Redirects. Stops the bleeding.~1 hr · Critical
  2. Complete the schema NAPFull street address, postal code, geo, priceRange + NAP in the footer.~1 hr · High
  3. Sitemap hygieneAdd /contact; tier priorities.~15 min · High
  4. Fix homepage heading structureDemote second H1; add keyworded H2 sections.~30 min · High
  5. Build out the city × service matrixClone the Annapolis template per city; expand the /service-area hub.Ongoing · Growth
  6. Font & image dietDrop to 2–3 font families, webp + srcset on gallery imagery, alt-text pass.~2 hrs · Medium
APPENDIX A

Crawl Record

All URLs from sitemap.xml plus the contact page, fetched June 10, 2026. T = title length, D = description length, W = approximate visible word count.

URLStatusTDH1W
/20040140×21,152
/roofing-replacements-and-repairs200521221767
/siding-replacements-and-repairs20049831762
/gutters-replacements-and-repairs200491461773
/roof-coatings200351381776
/roof-inspections200381351768
/fire-smoke-water-and-wind-damage-repair200611371942
/service-agreements-and-maintenance-programs200631531926
/service-area200361171178
/service-area/prince-frederick-md200581541563
/service-area/waldorf-md200311601547
/service-area/silver-spring-md200341621557
/service-area/la-plata-md200501631540
/service-area/fort-washington-md200641681576
/service-area/annapolis-md200551551698
/about-us200301241798
/contact (not in sitemap)200321101
/faqs200341211845
/gallery200461041182
/resources200311251301
/protecting-commercial-buildings…silver-spring-md200711651814
/when-to-schedule-a-roof-inspection-in-waldorf-md200491661812
/understanding-roof-replacement…prince-frederick-md200631701780