Last updated on October 22nd, 2026 at 01:57 pm
Schema markup for law firms helps search engines connect your firm, attorneys, services, and office locations. Start with the free generator below, then follow the WordPress installation and testing steps.
Law Firm Schema Resources
- Free law firm schema generator: create markup for offices and attorney profiles.
- Legal directory schema guide: organize directory listings, law firms, and attorneys.
- WordPress installation guide: add the missing markup to your existing setup.
- Schema testing checklist: validate the code and check the live page.
Request a free law firm schema audit
Free Law Firm Schema Generator
Create a JSON-LD starting point in three steps: choose your setup, enter your website details, and generate your markup. Try an example to see the format before entering your own information. No account required.
FREE TOOL · JSON-LD
Build your law firm schema
Choose a setup, enter the facts shown on your website, then generate and test your markup. Fields marked * are required.
Your inputs stay in this browser. This tool checks required inputs; external testing is still needed.
Next: check your markup
- Copy your generated markup.
- Open Schema.org Validator, choose Code Snippet, paste it, and run the test.
- Use Google’s Rich Results Test to check supported search features. A valid schema type does not automatically qualify for a rich result.
- After installation, test the live page URL and check for duplicate entities.
Before you install it: Compare the generated entity IDs with what your SEO plugin already outputs. Keep one consistent identity for each firm, office, and attorney. This generator covers core business and profile details; use the connected example below when you also need service, page, and breadcrumb relationships.
What Schema Markup Does for a Law Firm
Schema is structured data added to your website’s code. It identifies your business, describes each attorney, and connects people to the services and offices shown on your pages. JSON-LD is the format used by the examples in this guide.
Accurate markup helps search engines interpret those relationships and can support eligible search features, such as breadcrumbs. It does not guarantee higher rankings, review stars, or inclusion in AI answers.
Start with accurate business details and useful content. Schema supports your technical SEO; your site still needs proper indexing, clear navigation, and fast page speeds.
The Most Important Schema Types for Law Firms
Choose markup that matches each page. You do not need every schema type on every URL.
| Schema type | Where to use it |
|---|---|
| LegalService | The law firm or a real office, described on the homepage or location page. LegalService is already a LocalBusiness subtype. |
| Person | Individual attorney profiles. Connect each lawyer to the firm with worksFor. |
| Service | A practice-area page describing a specific service. Connect it to the firm with provider. |
| Organization | A separate parent organization when needed, such as a firm with multiple branches. |
| WebSite and WebPage | The website and individual pages. Reference the relevant business, person, or service using consistent @id values. |
| BreadcrumbList | Pages with a breadcrumb trail that reflects their place in the site. |
Two limitations: FAQPage can describe visible FAQs, but it does not earn a Google FAQ rich result. Reviews of your firm on your own site, including third-party widgets, are excluded from self-serving business review stars. Person is not a supported review-snippet type.
Use Person for a lawyer, not the deprecated Attorney business type. Avoid creating disconnected LegalService, LocalBusiness, and Organization records for the same office.
Schema Markup Examples for Law Firms
The examples below use JSON-LD, Google’s recommended format for implementing structured data. Replace the sample information with your own law firm’s business details before adding the code to your website.
LegalService Schema Example
This schema identifies your law firm as a legal service business and provides Google with important business information.
View code
{
"@context": "https://schema.org",
"@type": "LegalService",
"name": "Smith Criminal Defense",
"url": "https://www.examplelawfirm.com",
"telephone": "(555) 555-5555",
"image": "https://www.examplelawfirm.com/logo.png",
"priceRange": "$$$",
"areaServed": "San Francisco, CA",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
}
}
Attorney (Person) Schema Example
Use Person schema on attorney profile pages to help search engines understand each lawyer at your firm.
View code
{
"@context": "https://schema.org",
"@type": "Person",
"name": "John Smith",
"jobTitle": "Criminal Defense Attorney",
"worksFor": {
"@type": "LegalService",
"name": "Smith Criminal Defense"
},
"url": "https://www.examplelawfirm.com/attorneys/john-smith/"
}
LocalBusiness Schema Example
This illustrates the broader LocalBusiness type. For a law office, prefer its more specific LegalService subtype, with the correct address and phone number. Treat this as an alternative example, not an additional description of the same office.
View code
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Smith Criminal Defense",
"telephone": "(555) 555-5555",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105"
}
}
FAQPage Schema Example
This optional example shows the FAQPage format. Its question and answer must also appear on the page. It does not qualify for a Google FAQ rich result.
View code
{
"@context":"https://schema.org",
"@type":"FAQPage",
"mainEntity":[
{
"@type":"Question",
"name":"Does schema improve SEO?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Schema helps search engines understand your content. Some supported types can qualify for rich results, but Google no longer shows FAQ rich results."
}
}
]
}
Breadcrumb Schema Example
Breadcrumb schema helps Google understand your site’s hierarchy while improving navigation.
View code
{
"@context":"https://schema.org",
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"name":"Home",
"item":"https://www.examplelawfirm.com"
},
{
"@type":"ListItem",
"position":2,
"name":"Criminal Defense",
"item":"https://www.examplelawfirm.com/criminal-defense/"
}
]
}
A Connected JSON-LD Example
This fictional example represents a single-office firm’s criminal defense page. It assumes the page identifies the firm, displays its office details, describes the service, mentions Jane Example, and includes the breadcrumb trail shown below.
Before using it: Replace every sample name, URL, phone number, address, and service detail. Remove any entity or claim that your page does not support. This is a starting template, not a guarantee of Google eligibility.
View code
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "LegalService",
"@id": "https://example.com/#firm",
"name": "Example Law Firm",
"url": "https://example.com/",
"telephone": "+1-415-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Example Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
}
},
{
"@type": "Person",
"@id": "https://example.com/attorneys/jane-example/#person",
"name": "Jane Example",
"jobTitle": "Criminal Defense Attorney",
"url": "https://example.com/attorneys/jane-example/",
"worksFor": {
"@id": "https://example.com/#firm"
}
},
{
"@type": "Service",
"@id": "https://example.com/criminal-defense/#service",
"name": "Criminal Defense Representation",
"serviceType": "Criminal defense",
"provider": {
"@id": "https://example.com/#firm"
},
"areaServed": {
"@type": "City",
"name": "San Francisco"
},
"url": "https://example.com/criminal-defense/"
},
{
"@type": "WebPage",
"@id": "https://example.com/criminal-defense/#webpage",
"url": "https://example.com/criminal-defense/",
"name": "Criminal Defense Representation in San Francisco",
"mainEntity": {
"@id": "https://example.com/criminal-defense/#service"
},
"mentions": {
"@id": "https://example.com/attorneys/jane-example/#person"
},
"breadcrumb": {
"@id": "https://example.com/criminal-defense/#breadcrumb"
}
},
{
"@type": "BreadcrumbList",
"@id": "https://example.com/criminal-defense/#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Criminal Defense",
"item": "https://example.com/criminal-defense/"
}
]
}
]
}
</script>
How the Connections Work
@graphgroups the related records in one JSON-LD block.@idgives each entity a consistent identifier. Keep the firm’s identifier the same when referring to it elsewhere.worksForconnects Jane Example to the firm.providerconnects the criminal defense service to the firm.mainEntityidentifies the service as the main subject of this page.mentionsconnects the page to the attorney it discusses.
The fragments such as #firm identify entities; they do not require separate WordPress pages. The page URLs before those fragments should use your real canonical URLs.
If Rank Math or Yoast already identifies your business with an @id, reuse that identifier when extending its graph. Do not paste this whole example alongside existing output without checking for conflicting business, webpage, or breadcrumb records.
For an attorney bio, make the Person the page’s main entity. For another practice area, change the Service and WebPage records while continuing to reference the same firm.
Schema Markup for Legal Directories
A directory needs different markup for its category listings, firm profiles, and individual attorneys. Use CollectionPage with ItemList for listings, LegalService for firms, and Person for lawyers.
See the separate guide to best practices for schema markup in legal directories for the checklist, three code examples, and validation screenshot.
How to Handle Multiple Offices
Give each real office its own LegalService entity, location-page URL, and stable @id. Connect branches to a parent Organization with parentOrganization. Use the Multiple Offices preset in the generator to create a starting point. On a location page, include the parent and the relevant office; on an overview page, include only locations described there. Do not create office entities for cities where you only serve clients.
How to Add Schema in WordPress
I would start by inspecting the existing output. Installing another schema plugin before doing that can create more cleanup work.
- Check the page first. Run the public URL through the Schema Markup Validator. Note the existing business, webpage, article, and breadcrumb entities and their identifiers.
- Choose one main schema system. Review the business and schema settings in your existing Rank Math or Yoast setup. Available controls depend on the plugin and edition. Use its supported settings or extensions when they can produce the structure you need.
- Prepare only the missing markup. Customize the example for the specific page and reconcile it with existing output. For many pages, a developer-maintained template is easier to keep accurate than dozens of manually edited copies.
- Add custom markup through a managed snippet. If using WPCode, create an HTML snippet with a clear name such as “Law Firm Schema Criminal Defense.” Include the JSON-LD script wrapper. Target only the intended page using the insertion or conditional options available in your setup.
- Check the insertion scope before activation. A practice-area example should not automatically run across every page. If your setup cannot target the page accurately, use a supported page-specific method before activating it.
- Save, clear relevant caches, and test the public page. Verify the final rendered output, including any markup added by plugins.
Classic Editor note: The code displayed in this article is a teaching example. Pasting it into the Visual editor can display it as text instead of installing structured data. Keep the article copy in the editor and manage executable markup through your chosen schema system.
For related tools, see my WordPress plugin guide. Adding another plugin is only useful when it fills a specific gap.
Test Your Schema and Avoid Common Mistakes
- Validate the code. Use the Schema Markup Validator before installation, then test the public URL to check the final output.
- Check supported Google features. Run the page through Google’s Rich Results Test. A valid schema type does not necessarily qualify for a rich result.
- Monitor after crawling. Use URL Inspection and any relevant Search Console enhancement reports. There is no dedicated report for every schema type.
- Retest after changes. Review the output after changing plugins, templates, attorney details, or office information.
Quick Law Firm Schema Audit Checklist
- Each real office has an accurate LegalService entity and a stable @id.
- Attorney profiles use Person; practice-area markup describes the service on that page.
- Names, addresses, phone numbers, and relationships match the visible content.
- Existing plugin output and custom markup do not create conflicting or duplicate entities.
- Code parses correctly; errors are fixed and warnings reviewed for relevance.
- Reviews and other feature-specific markup meet Google’s eligibility rules.
Avoid: invented offices, outdated contact information, identical page-specific markup across the whole site, and claims that passing a test guarantees rankings or stars.
Common Questions About Law Firm Schema
Can you have too much schema markup?
Yes. Add only types and properties that describe the page. More markup adds no value when it duplicates existing entities or describes information the page does not support.
Should law firms use ProfessionalService schema?
ProfessionalService is deprecated. Use LegalService for the business, Person for attorneys, and Service for a specific legal service.
How long does schema markup take to show results?
Google must recrawl the page to process changes. There is no fixed timeline or guarantee of a ranking, traffic, or rich-result improvement. Verify the implementation first, then monitor Search Console.
Can WordPress automatically generate schema markup?
SEO plugins can generate common business, website, article, and breadcrumb markup. Check your plugin’s actual output before adding custom JSON-LD. Extend what is missing and reuse its entity IDs.
When should I update my schema?
Update it when attorneys, offices, hours, contact details, or services change. Include a schema check in your regular website maintenance.
Free Law Firm Schema Audit
Send me your website URL and the page or validator result you want help with. I’ll review missing markup, duplicate entities, and implementation problems, then explain the WordPress changes needed.
