Short answer: schema markup for law firms comes down to a handful of types: one Organization or LegalService node with a stable @id, a Person node on each attorney bio linked back to the firm, location details for every office, BreadcrumbList, and Article on blog posts. FAQ and HowTo rich results no longer show for law firms, but clean schema still helps Google and AI systems understand who you are.
Most law firm sites we audit have one of two problems. Either there is no structured data beyond whatever a plugin added by default, or there is far too much of it: two or three competing Organization blocks, FAQ markup on every page, review stars the firm wrote about itself, and a HowTo block on a blog post about filing a claim. The second is usually worse, because it creates contradictions.
What schema markup actually does now
Schema markup is structured data, usually written as JSON-LD, that describes the things on a page in a vocabulary machines read without guessing. A human knows your homepage describes a firm with an office on Main Street. A crawler has to infer that. Schema states it directly.
For years the main selling point was rich results: star ratings, expandable FAQ answers, step-by-step HowTo panels in the search results. For law firms, most of those are gone. What remains is less visible and more useful over time. Structured data is one of the ways Google connects your website to your Business Profile, your attorneys, and the other places your firm is mentioned. It gives AI systems a clean, consistent statement of who you are, what you do, and where you do it, which matters when a model is assembling an answer about firms in your city. If you are working on that side of visibility, our guide to AI Overviews for law firms covers the content half of the job.
Schema does not rank a page by itself. It will not rescue thin content or fix a slow site. Think of it as labeling: it makes accurate information easier to read, and it makes inaccurate or contradictory information easier to spot.
The schema types that matter for a law firm
| Schema type | Where it goes | What it does for a law firm |
|---|---|---|
| Organization or LegalService (one node, stable @id) | Site-wide, output once in the global graph | States the firm’s name, logo, URL, phone and profiles as a single entity everything else points to |
| Person (with worksFor) | Each attorney bio page | Connects a named attorney to the firm, with job title, bar credentials and education |
| LegalService or LocalBusiness fields per office | Each office or location page | Gives each office its own address, phone, hours and geo coordinates, matching the Business Profile |
| BreadcrumbList | Every page below the homepage | Describes site hierarchy and can show a readable path in search results |
| Article or BlogPosting | Blog posts and guides | Identifies the author, publisher, and published and modified dates |
| WebSite and WebPage | Site-wide and per page | Ties each page to the site and the site to the firm; plugins usually handle this |
Organization or LegalService, with one stable @id
This is the anchor for everything else. LegalService is a schema.org type that sits under LocalBusiness, so it inherits address, telephone, opening hours and area served. Many firms use it for the main firm node. Others use a plain Organization node for the firm as a whole and LegalService for each physical office. Either approach works if it is consistent.
The detail that matters most is the @id. This is a URL-style identifier, typically something like your homepage URL followed by #organization, that names the firm node. Every other piece of schema on the site that refers to the firm should point to that same @id rather than describing the firm again. Articles reference it as publisher. Attorney pages reference it in worksFor. Office pages reference it as parentOrganization. One entity, referenced many times, instead of fifteen slightly different descriptions of the firm scattered across the site.
Include the legal name, the name you actually use, the logo, the main phone number, the site URL, and a sameAs array listing profiles you control: your Business Profile, bar association directory listing, LinkedIn company page, and similar. Only list profiles that exist and that you can keep current.
Person on attorney bio pages, linked with worksFor
Schema.org does have an Attorney type, but it is a business type rather than a person type, and schema.org itself marks it as deprecated in favor of LegalService. For the human being on a bio page, use Person. Give it a name, jobTitle, image, a url pointing to the bio, alumniOf for law school, and a worksFor property that references the firm’s @id. If the attorney has a bar directory profile or a professional LinkedIn page, list those in sameAs.
This is where schema earns its keep for AI search. A model trying to answer “who handles wrongful termination cases in this city” does better with pages that clearly say a named person, at a named firm, practices a named kind of law. The markup reinforces what the page already says. Our guide to attorney bio page content covers the writing that should sit underneath it.
Location details for each office
If you have more than one office, each deserves its own page and its own LegalService node with its own @id, full postal address, local phone number, opening hours and geo coordinates. Link each office back to the main firm with parentOrganization. The address and phone should match your Google Business Profile for that location exactly, down to suite numbers and abbreviations. Mismatches between schema, the visible page and the Business Profile are one of the more common and more avoidable problems in local search.
BreadcrumbList and Article
BreadcrumbList is simple and worth having everywhere below the homepage. It describes where a page sits: Home, then Practice Areas, then Personal Injury, then Truck Accidents. Most SEO plugins output it automatically if breadcrumbs are enabled.
Article or BlogPosting goes on blog content. The important fields are headline, datePublished, dateModified, author and publisher. If an attorney wrote or reviewed the post, set author to that attorney’s Person node by @id. If the firm publishes under its brand, set author to the organization. Keep dateModified honest: change it when the content materially changes, not every time someone fixes a comma.
What no longer does anything visible
Three types still appear constantly on law firm sites despite producing no rich results for them.
FAQPage
In August 2023 Google restricted FAQ rich results to well-known, authoritative government and health websites. A law firm’s FAQ markup will not produce expandable questions in search results. The markup is still valid schema.org and is not harmful when it accurately matches visible questions and answers on the page, and it can still help machines parse a question-and-answer section. What it will not do is get you extra space on the results page. If someone sold you FAQ schema as a rich result tactic, that tactic ended in 2023.
HowTo
Google removed HowTo rich results in 2023. HowTo markup on a post about “how to file a personal injury claim” does nothing visible now. There is no reason to add it.
Self-serving review markup
Since 2019 Google has not shown review stars for reviews a business publishes about itself on LocalBusiness or Organization markup. Testimonials pasted onto your site and marked up with AggregateRating will not generate stars in search. Worse, review markup that does not reflect genuine, visible reviews can conflict with Google’s structured data guidelines. Keep the testimonials if your state’s advertising rules allow them and they are real. Drop the rating markup.
On the testimonials themselves: ABA Model Rule 7.1 prohibits false or misleading communications about a lawyer’s services, and states apply it to testimonials and endorsements differently. Our attorney advertising rules by state hub covers how individual jurisdictions handle them. This is not legal advice; check your state bar’s rules before publishing reviews or results.
Avoiding duplicate entities when a plugin already outputs schema
If your site runs on WordPress with Yoast SEO or Rank Math, you already have a schema graph. Both plugins output a connected set of nodes: WebSite, WebPage, Organization or Person, BreadcrumbList, and Article on posts, all linked by @id. This is where most self-inflicted schema damage happens.
The common pattern goes like this. A firm wants richer firm data, such as office hours, geo coordinates, or a sameAs list the free plugin tier does not expose. Someone pastes a complete LegalService block into the header or installs a second schema plugin. Now the page has two firm entities with different @id values, perhaps with slightly different names or phone numbers. Google has to decide which one is real, and every Article on the site still points to the plugin’s version as publisher.
The fix is to extend the existing graph rather than compete with it. View the source of your homepage, find the plugin’s Organization node, and copy its @id exactly. Then add your extra properties in a separate JSON-LD block that uses that same @id. Search engines merge nodes that share an @id, so your additions attach to the plugin’s firm entity instead of creating a second one. Both Yoast and Rank Math also offer developer filters to modify their graph directly, which is cleaner if you have someone comfortable with PHP.
Two rules help. First, never repeat properties the plugin already sets, particularly logo and image, because two different logo values on one entity is exactly the kind of contradiction you are trying to avoid. Second, turn off overlapping schema from every other source: theme schema, page builder schema, review plugins and local SEO plugins often each emit their own firm node. One source for the firm entity, extended by @id where needed.
If you are planning a rebuild, sort this out in the build rather than after launch. Our law firm website launch checklist includes structured data checks alongside redirects and tracking.
How to validate your schema
Use two tools, because they answer different questions.
Google’s Rich Results Test tells you whether a page qualifies for the rich results Google currently supports, and flags errors in those types. It ignores types Google does not use for rich results, so a clean result does not mean your whole graph is correct.
The Schema Markup Validator at validator.schema.org checks everything against the schema.org vocabulary, regardless of whether Google uses it. This is where you spot duplicate Organization nodes, broken @id references, and properties attached to the wrong type. Paste a URL, then read the detected items. If you see two firm entities, you have work to do.
After fixing anything, test the live URL again, because cached pages can show old markup for a while.
If this sounds like more technical work than you want to do in-house, structured data is part of what we check in every law firm SEO audit.
Frequently asked questions
Does schema markup help a law firm rank higher?
Not directly. Schema helps search engines and AI systems understand the firm, its attorneys and its offices, and it can make some pages eligible for features like breadcrumbs in results. Rankings still depend on content, links, relevance and local signals.
Should a law firm still use FAQ schema?
It will not produce FAQ rich results, because Google limited those to authoritative government and health sites in August 2023. Accurate FAQ markup that matches visible questions is harmless and can help machines parse the section, but it is not a visibility tactic anymore.
Should I use the Attorney schema type or Person?
Use Person for individual lawyers. Attorney is a business type, and schema.org marks it as deprecated in favor of LegalService. Link each Person to the firm with worksFor, referencing the firm’s @id.
Can I add review stars to my law firm’s search results?
Not with reviews you publish about your own firm. Since 2019 Google has not shown review stars for self-serving reviews on LocalBusiness or Organization markup. Your Google Business Profile reviews are the place stars appear.
My SEO plugin already adds schema. Do I need anything else?
Often the plugin covers the basics. If you need more, such as office details or attorney credentials, extend the plugin’s graph by reusing its @id instead of adding a second Organization block, and disable schema from any other plugin or theme.
The short version
Mark up the firm once, with a stable @id, and point everything else at it. Put Person markup on every attorney bio and link it to the firm. Give each office its own location data that matches its Business Profile. Keep BreadcrumbList and Article. Stop expecting FAQ, HowTo or self-written review stars to show up in search, and never let two sources describe the firm at the same time.
Want to know what your site’s schema actually says about your firm? Request a free law firm SEO audit and we will include a structured data review.


