Short answer. For a law firm, the recommended type is LegalService; for a tax or accountancy practice, AccountingService; for a general consultancy, Organization or LocalBusiness with Service nodes. The generic ProfessionalService is deprecated in Schema.org for general use. The properties that carry the most signal to generative engines are knowsAbout, sameAs, address (consistent NAP), founder/Person with worksFor, and a FAQPage block. All of it in JSON-LD, inside a <script> in the <head>.
Why this markup matters more than ever
A website is written twice: once for people and once for machines. The human layer is the design and the copy; the machine layer is the structured markup. For years that second layer only fed Google's rich snippets. Today it is the raw material generative engines use to decide whether your firm exists as an entity and whether they can recommend it with confidence.
Across our diagnostics, most law firm websites — including some that are excellent for humans — are mute to a machine: no markup at all, or generic markup that declares neither speciality nor location. We measured the result in the Madrid Bar Test, run on the Spanish market: AI recommends the few firms it can read.
Which type to choose, case by case
| Type of firm | Recommended Schema type | Note |
|---|---|---|
| Law firm | LegalService | Inherits from LocalBusiness; there is also Attorney for individual profiles |
| Tax / accountancy practice | AccountingService | Specific and unambiguous |
| General consultancy / B2B boutique | Organization or LocalBusiness | With Service nodes per service line |
| Any professional service | ProfessionalService | ⚠️ Deprecated for general use — see below |
The ProfessionalService case: deprecated, with nuance
Schema.org marks ProfessionalService as deprecated for ambiguity, and recommends the specific types in the table. Using it does not 'break' anything — validators accept it and plenty of sites carry it — but the specific types give the engine more semantic clarity. Where compatibility matters, a robust practice is to declare the type as an array: "@type": ["LegalService", "Organization"] — the engine takes the specific type and keeps the generic base that Google recommends for administrative data.
The properties that carry the most signal
knowsAbout— the most underused. It states the specialities explicitly ('Corporate Law', 'M&A', 'Compliance'). It is the most direct way of telling the engine which queries you are relevant for.sameAs— links the verifiable profiles: LinkedIn, sector directories, registers. It builds the entity graph models use to corroborate that the firm is real. Without external corroboration there is no recommendation.address(NAP) — name, address and telephone identical to those across the rest of your online presence. A website that gives one city and a directory that gives another stop the engine reconciling the entity.founder/Person+worksFor— links partners to the organisation. Engines reason about person-entities as much as company-entities.FAQPage— its question-answer pairs already come in the exact format a generative engine extracts to answer. It is the block with the most immediate return.Service+provider— one node per practice area, linked to the organisation. It avoids the single 'services' page that a machine cannot break apart.
A complete example (ready to adapt)
A single block in the <head> of the home page, with a connected graph:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": ["LegalService", "Organization"],
"@id": "https://www.yourfirm.co.uk/#organization",
"name": "Firm Name",
"url": "https://www.yourfirm.co.uk",
"logo": "https://www.yourfirm.co.uk/logo.png",
"description": "Firm specialising in corporate law and M&A in London.",
"address": {
"@type": "PostalAddress",
"streetAddress": "Example Street 1",
"addressLocality": "London",
"postalCode": "EC4M 7LS",
"addressCountry": "GB"
},
"telephone": "+44 20 7000 0000",
"email": "contact@yourfirm.co.uk",
"areaServed": { "@type": "Country", "name": "United Kingdom" },
"knowsAbout": ["Corporate Law", "M&A", "Compliance"],
"sameAs": [
"https://www.linkedin.com/company/yourfirm/"
],
"founder": [{
"@type": "Person",
"name": "Partner Name",
"jobTitle": "Managing Partner",
"worksFor": { "@id": "https://www.yourfirm.co.uk/#organization" },
"sameAs": ["https://www.linkedin.com/in/partner/"]
}]
},
{
"@type": "Service",
"name": "M&A advisory",
"provider": { "@id": "https://www.yourfirm.co.uk/#organization" },
"serviceType": "Mergers and acquisitions",
"areaServed": "GB"
}
]
}
Always validate at validator.schema.org before publishing. A JSON-LD block with a syntax error is invisible in full, not in part.
Mistakes we see every week in diagnostics
- Missing or broken JSON-LD — one comma too many and the whole block stops parsing, silently.
- Contradictory NAP — the schema gives one city and the legal notice another. The engine cannot reconcile the entity.
- Empty
sameAs— with no links to verifiable profiles, the engine has no way to corroborate that the firm exists. - Everything on a single 'services' page — with no
Servicenode per area, the machine cannot associate the firm with specific queries. - Correct markup on a page that is not indexed — the best schema in the world is no use if the crawler never arrives: robots.txt, sitemap and indexing come first.
How it fits into a full GEO strategy
Markup is the technical legibility phase of Generative Engine Optimization: it comes after the diagnostic (measuring whether AI sees you) and before the authority work (getting other sources to corroborate you). The full discipline, with phases, prices and criteria for choosing a provider, is in the guide GEO consulting for law firms; the measurement method is in the algorithmic visibility audit.
Frequently asked questions
Which Schema.org type should a law firm use?
For a law firm, the recommended type is LegalService (which inherits from LocalBusiness), complemented by Service nodes for each practice area, Person for each partner linked through worksFor, and FAQPage on the pages that answer questions. For a general consultancy or accountancy practice, the recommended base is Organization or LocalBusiness with Service nodes. All of it in JSON-LD format.
Is ProfessionalService deprecated?
Yes. Schema.org marks ProfessionalService as deprecated for general use because it is ambiguous, and recommends more specific types: LegalService for law firms, AccountingService for tax and accountancy practices, or Organization/LocalBusiness as a generic base. Using it does not break anything on its own, but the specific types give more semantic clarity. A robust practice is to declare the specific type alongside Organization in an array.
Which Schema.org properties matter most for visibility in AI?
The ones most often missing and carrying the most signal: knowsAbout (explicit specialities), sameAs (verifiable profiles that build the entity graph), a complete address consistent with the rest of your online presence (NAP), founder/Person with worksFor, and FAQPage (its question-answer pairs already come in the format engines extract).
Is Schema.org enough for AI to recommend my firm?
No. Markup makes the website legible to the machine, which is a necessary but not a sufficient condition. Engines also need to corroborate the entity in external sources (directories, mentions, verifiable profiles). A firm with perfect Schema and no external authority will still not appear in competitive queries. The technical side is fixed in weeks; authority is built over months.
Update (July 2026): the markup in practice
Schema is the layer we release, not the one we build: it makes legible to the engine what the firm already is. We tested it on our own website — impeccable markup from day one — and in two months we went from no engine recognising us to Gemini including us among the consultancies it recommends, in Spanish-language queries. Schema was the necessary condition; authority was the slow work that came after. How it looked, here.
Want to know whether your markup is legible to AI?
The GEO audit covers a full technical scan of your website (Schema, NAP, robots, indexing), the twenty-query Bar Test across the five engines and a 30/60/90-day implementation plan. From €1,500.
Request a diagnostic