Someone told you that your law firm website "needs schema," you ran a page through a validator, and it came back with either nothing or a tangle of warnings from three plugins that all claim to handle it. You want to know what schema markup is actually supposed to accomplish for a law firm and which parts are worth doing.
The short version: schema is a machine-readable label for the things your pages already say. It does not make weak content rank. It does make it easier for Google and for AI systems to understand that this page is about a law firm, at this address, with these attorneys, practicing these areas, and that it is the same entity as the profiles on Avvo and the state bar.
What schema does for a law firm site (and what it does not)
Schema.org vocabulary, written as JSON-LD inside a script tag, describes entities and their properties. Google uses some types to generate rich results (breadcrumbs, article dates, some review stars). Language-model search tools read it as one more signal about what a page is and who published it.
What it does not do is guarantee any visual feature or any AI citation. Google's rich results are discretionary, and several types that used to produce them (FAQPage, HowTo, review snippets for businesses describing themselves) no longer do in most cases. Treat schema as disambiguation, not decoration. Done well it supports entity clarity; done badly it introduces contradictions.
Which types apply: LegalService, Attorney, Person, Organization
For the firm itself, use LegalService. It is a subtype of LocalBusiness, which means it accepts address, telephone, openingHoursSpecification, areaServed, priceRange and geo. Attorney is a subtype of LegalService and is fine for a solo practice, but for a firm the cleaner pattern is LegalService for the office and Person for each lawyer.
Each attorney bio page should carry a Person block with name, jobTitle, worksFor (pointing at the firm's @id), alumniOf, memberOf (bar associations), knowsAbout (practice areas) and image. If your state bar publishes a public profile URL, link to it in sameAs. This is the markup most firms skip, and it is the one that lets a system connect "Jane Doe" on your site with "Jane Doe" on the bar directory.
Use Organization only if you need a parent entity above multiple LegalService locations. A three-office firm is one Organization with three LegalService branches, each with its own address and @id, and each office page carries only its own branch. Putting all three addresses on every page is the most common multi-office mistake.
The sameAs property matters more than the rest
sameAs is an array of URLs that identify the same entity elsewhere. For a law firm that means the Google Business Profile URL, the state bar listing, Avvo, Justia, FindLaw, Martindale, the LinkedIn company page, and any Wikipedia or Wikidata entry (rare, but powerful when it exists).
The reason it matters: AI search engines and Google's Knowledge Graph both build confidence about an entity by triangulating across sources. sameAs is you stating the triangulation explicitly. Keep the list to profiles you control and keep current; a sameAs pointing at a dead Yelp page does nothing useful.
Also fill in the boring identity fields consistently: legalName, name, telephone in one format, and address with every component (streetAddress, addressLocality, addressRegion, postalCode, addressCountry). These must match the visible page and the Business Profile character for character. If your directory citations disagree with your schema, fix the citations rather than bending the schema to match them.
FAQPage after Google pulled the rich result
In 2023 Google limited FAQ rich results to government and health sites, so a law firm's FAQPage markup no longer produces the expandable questions on the results page. Firms reasonably asked whether to remove it.
We keep it, with two conditions. The questions and answers must be visible on the page in the same words, and the answers must be real (two to four sentences that resolve the question). Question-and-answer pairs are exactly the unit AI answer engines extract, and labeling them costs nothing. Keeping the markup honest also matters for Google AI Overviews, where the visible Q&A does the work and the markup confirms it.
Skip AggregateRating and Review markup for testimonials you host about yourself. Google treats self-serving reviews as ineligible for stars, and marking them up invites a manual action.
Where the markup lives on a WordPress site
Most law firm sites run WordPress, and most schema problems come from stacking: Yoast or Rank Math emits an Organization or LocalBusiness block, the theme emits another, and a "local SEO" plugin emits a third with a slightly different name. Validators show three entities; a machine cannot tell which is authoritative.
Pick one source. Our preference is to let the SEO plugin handle Article and BreadcrumbList for posts, and to write the LegalService and Person blocks by hand in a small site-specific plugin or the theme's functions file, with stable @id values (for example https://yourfirm.com/#legalservice). Then confirm with Google's Rich Results Test and the Schema Markup Validator that each page emits exactly the entities you intended, and no more.
This kind of cleanup usually happens alongside broader technical SEO work, and if the site needs a rebuild anyway, WordPress development done with schema in mind avoids the stacking problem entirely. The AEO for lawyers hub explains how structured data fits with content structure and entity work; schema is one leg of that stool, not the whole thing.
Questions we get
Will schema markup improve our rankings?
Not directly. Google has said structured data is not a ranking factor, and we see no evidence otherwise. It improves how your firm is understood, which supports rich results, knowledge panels and AI citations, all of which depend on other things being right too.
Should we use Attorney or LegalService?
For a solo, Attorney is fine and slightly more specific. For a firm with more than one lawyer, use LegalService for the business and Person for each attorney. Typing the whole firm as Attorney produces a business that is described as a single lawyer, which is wrong.
Can our web agency's plugin handle this?
It can handle Article and breadcrumbs. Firm-level and attorney-level markup with correct sameAs and @id relationships usually needs someone to write it deliberately, then check that nothing else on the site emits a competing block.
If you would like us to look at what your site currently emits, tell us what you are working with.
