
Imagine a stranger walks into your firm's lobby. Within a minute, a good receptionist could tell them who the partners are, what kinds of cases you handle, which attorney fits their situation, and which city you practice in. She knows how everything connects.
Now imagine that stranger is a search engine or an AI assistant, and your website is the lobby. It can read every word on every page, but it has no receptionist to explain how those words relate. It has to guess. Schema is how you give it that receptionist.
Schema (or "schema markup") is a standardized vocabulary for labeling the important things on your website so machines don't have to guess what they mean. It was created in 2011 by Google, Microsoft (Bing), Yahoo, and Yandex, and it is maintained at Schema.org. The major search engines all read it.
Think of name tags at a conference. Without them, you see a room full of people and have to work out who is who from context. With them, you know instantly: this is an attorney, this is a client, this is the host.
Behind the scenes, schema says things like:
Your visitors never see any of this. It is a layer of labels written for machines.
You never have to write this yourself, but seeing it removes the mystery. Schema is usually added as a small block of text in a format called JSON-LD, which Google recommends. In plain terms, it's a fact sheet about your firm:
Type: LegalService
Name: Smith & Jones Law Firm
Area served: Los Angeles, CA
Employee: John Smith (Partner)
Knows about: Personal injury law, Motorcycle accidents
The real version contains the same information in a stricter format, which the next section walks through. Schema.org includes types built for your world, such as LegalService, Attorney, Person, Service, Place, Article, and Review, and properties like areaServed, knowsAbout, worksFor, and sameAs that describe how things relate.
Most people picture AI reading a website the way they do: top to bottom, absorbing the gist. Schema works differently, and that difference is why it's valuable. When you read a paragraph, you interpret it. When a machine reads JSON, it looks up labeled fields, the way you'd read a completed form. A form doesn't say "Well, I've lived in Los Angeles for a while now." It has a box labeled City, and the answer is in the box.
JSON (short for JavaScript Object Notation) is simply a way of writing information as labels paired with values. The label goes on the left, the value on the right:
"name": "Smith & Jones Law Firm"
That one line means: the name of this thing is Smith & Jones Law Firm. There is nothing to interpret.
Here is a simplified but realistic version of what sits behind a law firm's page:
{
"@context": "https://schema.org",
"@type": "LegalService",
"@id": "https://www.smithjones.com/#firm",
"name": "Smith & Jones Law Firm",
"areaServed": {
"@type": "City",
"name": "Los Angeles"
},
"knowsAbout": [
"Personal injury law",
"Motorcycle accident claims"
],
"employee": {
"@type": "Person",
"@id": "https://www.smithjones.com/attorneys/john-smith/#person",
"name": "John Smith",
"jobTitle": "Partner",
"worksFor": { "@id": "https://www.smithjones.com/#firm" },
"sameAs": "https://www.calbar.ca.gov/example-profile"
}
}
It looks intimidating, but here is what each part says in plain English:
| Line | What it tells the machine |
|---|---|
@context |
"Use the Schema.org dictionary for the words that follow." |
@type: LegalService |
"The thing I'm describing is a legal service business." |
@id |
"Here is this firm's permanent ID, so everything else can point back to it." |
name |
"Its name is Smith & Jones Law Firm." |
areaServed |
"It serves a city, and that city is Los Angeles." |
knowsAbout |
"Its areas of expertise are personal injury and motorcycle accident claims." |
employee |
"It has a person working for it." |
worksFor |
"That person works for the firm with the ID above." |
sameAs |
"This is the same person listed on this state bar profile." |
The curly braces { } group facts about one thing. Square brackets [ ] hold lists. Indentation shows which facts belong to which thing. That's the whole grammar.
A law firm's website can contain hundreds of pieces of information spread across dozens or even hundreds of pages.
For example:
A person can read those pages and usually figure out how everything fits together. Search engines and AI systems have to figure it out from the information they find. Schema helps make those connections clearer.
For example, instead of simply saying that a law firm handles personal injury cases, schema can help communicate:
Law Firm → provides → Personal Injury Law → handles → Car Accident Cases → serves → Los Angeles → attorney → John Smith
Now the information isn't just a collection of words on different pages. It becomes a connected picture of the firm.
Here is the journey from your page to a machine's understanding:
Because JSON is rigid, it's unambiguous, which is its great strength. It is also unforgiving. A single missing comma or quotation mark can make the entire block unreadable, like a tax form with an illegible box. That's why validation tools matter, and why markup added by several plugins at once can quietly break.
Not every system treats JSON-LD the same way, and it helps to know the difference:
sameAs links are how a machine decides that the John Smith on your site and the John Smith in the state bar directory are one person.The practical lesson is simple: schema and visible content should say the same thing. If an AI system reads only your visible text, your page needs to state clearly who your attorneys are, what you handle, and where you practice. If it reads your schema, that markup should confirm the same facts in a form that leaves no room for doubt. When both agree, you're covered whichever way a system reads your site. When they disagree, machines have reason to trust neither. Think of schema as the official record and your page as the conversation. A stranger is most convinced when both tell the same story.
A page can say "personal injury lawyer" fifty times. A search engine can count those words, but that doesn't tell it whether the firm actually handles motorcycle accident cases in Los Angeles, which attorney leads them, or what experience backs it up. Those facts may all be on your website, scattered across a practice page, an attorney bio, a blog post, and a results page. A person browsing would connect them. A machine may not.
Schema makes the connections explicit. Instead of a pile of separate facts, you get a chain:
Law Firm → practices → Personal Injury → handles → Car Accident Cases → serves → Los Angeles → attorney → John Smith
Each link is a fact a machine can rely on rather than infer.
The technical name for this connected picture is a knowledge graph. Google introduced the idea publicly in 2012 with the phrase "things, not strings," meaning it wanted to understand the things behind a search rather than just match the text typed into the box. Picture an org chart, but instead of only showing who reports to whom, it shows how the firm, its attorneys, its practice areas, its cities, its courts, and its case types all relate.
The "things" are called entities. For a law firm, they include:
| Entity type | Examples |
|---|---|
| The firm | Smith & Jones Law Firm, each office |
| People | Each attorney, key staff |
| Practice areas | Personal injury, employment, family law |
| Case types | Motorcycle accidents, wrongful termination |
| Places | Cities, counties, judicial districts |
| Institutions | Courts, bar associations, insurers |
| Content | Articles, guides, videos, case results |
| Topics | Comparative negligence, statutes of limitation |
The lines between them are relationships: practices, handles, serves, works for, is admitted in, is a member of.
The second version gives an AI far more to work with when deciding whether to recommend you.
Each entity in schema gets its own permanent identifier, the @id in the example above. That way, "John Smith" on the attorney page, the blog byline, and the homepage are recognized as the same John Smith, not three different people. Without this, a machine may treat them as separate strangers.
"Same as" links let you say: this firm is the same one that appears at your Google Business Profile, your state bar listing, your LinkedIn page, Avvo, Justia, and so on. This tells machines to merge everything they know about you into one picture. For attorneys, links to state bar profiles are especially strong because they are authoritative confirmation that the person is who your site says they are.
This matters because AI systems don't form their view of your firm from your website alone. They draw on the whole web. Your website is the one place you control the story, and schema is how you tell it in a form machines trust.
Schema is often sold as a way to get fancy search listings, like expandable FAQs or star ratings. There are two reasons not to build a strategy around that.
Increasingly, people get answers to questions like "Who's a good motorcycle accident lawyer in Los Angeles?" from AI-generated summaries and assistants. To answer well, those systems must decide which firms are truly relevant. A firm whose identity, expertise, and relationships are clearly established gives them more reason to include it.
Honesty here builds trust, so:
Law is what Google calls a "Your Money or Your Life" (Y.M.Y.L>) topic, where a bad answer can seriously harm someone. Systems apply extra scrutiny to trust signals in these areas, which is why clearly verifiable attorneys, credentials, and firm identity matter so much.
Once you draw the map of who your firm is and what it should be known for, you can compare it against what your website actually communicates. The differences are called entity gaps.
Say your firm wants to be known for Los Angeles motorcycle accident cases. You have a motorcycle accident page, and it's a good one. Mapping it out might look like this:
| What the firm should be connected to | On the site? | Clearly connected? |
|---|---|---|
| Attorneys who handle motorcycle cases | Bios exist | No link between bios and the practice page |
| Los Angeles and surrounding areas | Mentioned | Generic; no local roads, courts, or venues |
| Insurance issues (lane splitting, coverage disputes) | Missing | Gap |
| Questions riders actually ask | Partial | Not organized or marked up |
| Proof of experience (results, verdicts) | On another page | Not tied to this practice |
| Relevant courts and legal rules | Missing | Gap |
Traditional SEO advice would say, "You need more content." An entity gap analysis says something far more useful:
"Your site establishes that you're a personal injury firm in Los Angeles, but it has limited connections between your attorneys, motorcycle cases, local geography, insurance claims, and client questions."
That is a entity strategy roadmap, not a vague instruction.
Modern AI can analyze the meaning of your content, not just the keywords. It does this with vector embeddings. You don't need the math. Imagine a giant library where books aren't shelved alphabetically but by meaning, so books about similar ideas sit near each other. Embeddings turn each page into a location in that library.
That lets AI measure the distance between what the firm wants to be known for and what the website actually communicates. If the firm wants to be the Los Angeles motorcycle accident firm but the site mostly reads as "general personal injury," that distance is a semantic gap.
AI agents can weigh several things at once:
The output is a prioritized list of what to build, in the order that will most strengthen the picture. Those gaps guide what to create, and not only on the site:
The point isn't volume. Publishing more for its own sake just adds noise. The point is a consistent, connected body of information, where every piece reinforces the same story about who you are and what you do.
Consistency extends to the basics. Your firm name, address, phone number, and attorney names should read the same everywhere: website, Google Business Profile, directories, and bar listings. Inconsistencies force machines to wonder whether they're looking at one firm or several.
Schema makes claims in a machine-readable way, so those claims should meet the same standards as your visible marketing. Attorney advertising rules vary by state, and many restrict how terms like "specialist" or "expert" are used and require certain disclaimers on case results. Schema should describe only what the page truthfully shows. Have whoever handles your firm's ethics compliance review the language, especially for expertise and results.
Look for steady signals, not overnight jumps. Schema effects are gradual. Better signals include:
Traditional SEO asks: "What keywords are we ranking for?"
A more modern question is: "Do Google and AI actually understand who this firm is, what it does, where it practices, who its attorneys are, and which cases it handles?"
That's the shift from keyword optimization to entity optimization, from being found to being understood.
Schema is the starting point: the labels that let machines see the connections you already know exist. Content supplies the depth. AI analysis shows what's missing. Consistency across the web makes the whole picture believable. Traditional SEO asks: "What keywords are we ranking for?" A more modern GEO question is: "Do Google and AI actually understand who this firm is, what it does, where it practices, who its attorneys are, and which cases it handles?"
The goal isn't more schema, more pages, or more articles. It's a firm that is easy to understand, so that when someone asks the right question, the search engine or AI system has the context to know your firm is the answer.