TL;DR — LegalService for the firm, Person per attorney, no Attorney type
The minimum-viable boutique-firm schema install is two block types. The LegalService block lives on the homepage (and on each office page for multi-office firms) and carries the firm's name, address, telephone, areaServed, serviceType, and an employee array referencing the attorneys. The Person block lives on each attorney's bio page and carries name, jobTitle, image, knowsAbout (practice areas), alumniOf (law school), memberOf (bar associations), worksFor (the firm), and sameAs (directory profiles, LinkedIn, state bar listing). The blocks reference each other by @id so the search engines see one entity graph instead of two unconnected schemas.
Why Attorney is deprecated and what to use instead
Schema.org defines Attorney as 'a type of LegalService' and its documentation has long recommended LegalService as the more inclusive and less ambiguous type. The Attorney type is retained for backward compatibility with sites that adopted it before LegalService matured, but it provides no distinct rich-result behaviour and no signal to search engines that LegalService does not also provide. The 2026 best-practice install is LegalService for the firm entity and Person for each attorney — never Attorney.
The LegalService block — firm-level JSON-LD
The LegalService block describes the firm as a business. It lives on the homepage and on each office page for multi-office firms. The block carries name, url, telephone, address as a PostalAddress, areaServed as an array of strings or AdministrativeArea objects, priceRange as a $-symbol shorthand or a price band, openingHoursSpecification, serviceType as the practice area array, and employee as the array of attorney references. The @id is the firm's canonical identifier — typically the homepage URL with a fragment — and is what the attorney Person blocks reference back through worksFor.
The Person block — per attorney
Each attorney gets a Person block on the attorney's own bio page. The block carries name, jobTitle, url, image, knowsAbout (the practice areas the attorney handles), alumniOf (law school as an EducationalOrganization), memberOf (bar associations as an array of Organization references — one per bar admission), worksFor (the firm's LegalService by @id), and sameAs (an array of verifiable third-party profiles including Avvo, Justia, Martindale-Hubbell, LinkedIn, and the state bar's public attorney lookup). The @id on the Person block matches what the LegalService's employee array references.
Joining LegalService to Person — the entity graph
The two block types reference each other by @id. The LegalService's employee array contains lightweight references to each attorney Person (just {@id: '…#person'} per attorney). Each attorney Person's worksFor property contains a lightweight reference to the LegalService (just {@id: '…#legalservice'}). Search engines walking the graph from either entry point — the homepage or any attorney bio — resolve the cross-references and arrive at the same picture of who works at the firm and in what capacity.
Where the JSON-LD lives on a Squarespace site
On Squarespace 7.1, JSON-LD lives in Code Injection. The site-wide layer goes in Settings > Advanced > Code Injection > Header — but the LegalService and Person blocks are page-specific and belong in the per-page injection slot at Page Settings > Advanced > Code Injection > Header. Code Injection is gated to Business plan or above ($23/mo on annual at writing); Personal plan sites cannot install the schema layer at all, which is the single biggest gap on a boutique-firm Personal-plan site and the first reason to upgrade.