The checks, vertical-tailored
What the audit checks for law firms.
Every audit, on every plan, scores Foundational SEO, Technical SEO, Local SEO and AI Visibility at equal weight. Local SEO always applies here, because a missing address or Maps link is itself a finding. The check definitions are constant; the severity, the recommended fix, the competitor set, and the example code shift per vertical via the adapter.
Foundational pillar
Foundational
Keyword universe, content depth, on-page structure, internal link graph.
- h1-presence
Practice-area landing pages should lead with a single H1 in the pattern "[Practice Area] Lawyer in [City] | [Firm Name]". The firm-name-as-H1 pattern surrenders the local-intent click to whoever wrote a stronger H1 above you.
- passage-extractability
Every practice-area page should carry one or more 134-167 word "What is [practice area]?", "How long do I have to file?", "What does a [practice area] lawyer cost?" answer blocks co-located under a question-shaped H2 so LLMs can lift the passage verbatim into an answer.
- outbound-link-quality
Cite Cornell LII for the statute, the relevant state bar association on the procedural surface, and the relevant federal agency where applicable (NHTSA for auto accident, OSHA for workplace injury, etc.). Outbound authority signals trust on YMYL legal pages.
Technical pillar
Technical
Crawl, render, schema validation, Core Web Vitals, render-parity diff.
- schema-validation
LegalService JSON-LD must include serviceType (set to the specific practice area, e.g., "Personal Injury Law"), areaServed (city + state, or a precise legal jurisdiction), and provider as an Attorney reference with a sameAs to the state-bar license verification page.
- js-render-parity
Law-firm sites built on WordPress with elementor or a heavy client-side filter for practice-area pages frequently render the actual service descriptions via JS. AI crawlers see the empty version. The audit flags every page where the raw HTML is missing more than 30 percent of the rendered DOM content.
- core-web-vitals
Personal-injury and DUI traffic is overwhelmingly mobile (the searcher is often standing on a roadside or in a parking lot). LCP below 2.0s and INP below 200ms are required to keep the high-intent click from bouncing back to the SERP.
Local pillar
Local
On-site local signals: LocalBusiness schema, Maps link, phone and address, service-area pages.
- local-business-schema
The audit checks that a LocalBusiness-class type such as LegalService is declared in your JSON-LD. It does not validate the fields. We recommend geoCoordinates, openingHoursSpecification, priceRange ("Contingency basis" is acceptable for personal injury), and a sameAs to your state-bar verification page.
- nap-consistency
The audit reads this page for a complete phone, street address, and ZIP code fingerprint. It does not compare your listings on Google, Avvo, Justia, FindLaw, Martindale-Hubbell, your state-bar directory, or the BBB; check those by hand so they match your site exactly.
- service-area-page-coverage
The audit detects service-area pages from internal links that follow a /locations/ or /areas/ URL pattern. It does not grade how unique each page is, so write each metro page yourself around local courts, local case law, and local incident statistics rather than boilerplate.
AI Visibility pillar
AI Visibility
AI crawler readability, schema for AI, passage extractability, entity graph.
- schema-completeness-for-ai
The lawyer AI graph (LegalService + Attorney + Organization + Person + FAQPage + BreadcrumbList) is the densest in any vertical. AI engines triangulate "best [practice area] lawyer in [city]" answers against this graph, plus a credentialed-author byline.
- entity-graph
Per-attorney Person sameAs to LinkedIn, the state-bar member directory, the Justia profile, the Avvo profile, and (where applicable) a Martindale-Hubbell profile. AI engines treat the second-degree attorney entity graph as a primary trust signal on YMYL legal queries.
- passage-headline-co-location
A page that lists 8 practice areas, each with a one-sentence summary and an H3 link out, is unextractable for LLMs. Replace with question-shaped H2 + 134-167 word answer blocks per practice area. The page length grows but citation rate roughly triples.