InterCore Technologies
● InterCore · Agentic search optimization

Common Legal Schema Mistakes: aggregateRating, @id, and Content Drift

Be the firm AI recommends.

Avoid 5 common law firm schema errors: self-serving aggregateRating, @id bugs, drift, hardcoded values. Fix them to unlock AI citations.

Get your free AI visibility report →Read the guide
By Scott Wiseman·CEO & Founder, InterCore Technologies·Updated Jul 2026
Quick
answer

Avoid 5 common law firm schema errors: self-serving aggregateRating, @id bugs, drift, hardcoded values. Fix them to unlock AI citations.

TL;DR — Key takeaways
  • Self-serving aggregateRating on your org node is ignored by Google and penalizes your schema. Use real, third-party reviews only (Google Business Profile, Avvo, Justia); put aggregateRating on individual result/service pages, not the firm itself.
  • Using different @id strings for the same entity (firm, attorney, location) across your site splits it into multiple entities in the schema graph. This breaks entity recognition and AI citations. Reference one shared @id everywhere; never re-declare it.
  • Schema drift — fields that don't match visible content (hidden FAQ answers, invented ratings, hardcoded prices) — causes Google and AI engines to ignore or penalize your markup. Schema is a translator for visible content only; the single source of truth must be the live page.
  • Hardcoded colors, prices, phone numbers, and addresses in content components cause maintenance chaos and false information. Parameterize all dynamic fields; derive both visible content and schema from one source so they can never drift.
  • Omitting required fields for rich-result-eligible types (@type SoftwareApplication, LegalService, Product) triggers validation warnings and blocks rich results. Either supply all required fields or use a plain Thing + sameAs for a bare mention.
The complete guide

Read it, chapter by chapter

The full 7-chapter guide for law firms — pick any chapter to read it here.

Chapter 1 of 7

The aggregateRating Trap: Why Self-Serving Ratings Backfire

A law firm adds an aggregateRating node to its Organization schema: "ratingValue": 5.0, "ratingCount": 47. Google ignores it. Worse, the firm wonders why its schema is valid in validator.schema.org but no rich-result snippets appear in search results. The reason: Google's helpful-content policy explicitly penalizes self-serving claims, and a firm rating itself 5.0 stars on its own website looks exactly like that.

The correct rule: aggregateRating on the firm Organization node must come from a third-party source (real Google Business Profile reviews, Avvo ratings, Justia reviews). These are signals the firm did not create; they carry credibility. If you put your own fabricated or unsourced rating on your org node, it is ignored. If you misrepresent the GBP rating (claiming 4.8 when GBP says 4.2), it is ignored and harms your domain authority with Google.

For multi-office firms, the mistake multiplies: a single firm-wide 5.0 rating is copied to every city page, even though each city's office has a different GBP rating. A page for your San Francisco office renders a 5.0 star snippet from a Compass Law Group overall rating, even though the SF office's actual GBP rating is 4.6. Clients read the 5.0 and feel misled when they see the real 4.6 on the GBP profile.

The fix: (a) aggregateRating belongs on result/service pages with real, visible third-party reviews — customer testimonials, case-result kudos, GBP reviews quoted with permission. (b) For multi-office firms, each location page gets ITS OWN office's aggregateRating from that office's GBP profile (San Francisco page → SF office's GBP 4.6; Burbank page → Burbank office's GBP rating). (c) Derive the schema value from the same data source as the visible content (a constant or API query), so visible rating + schema rating are always in sync.

aggregateRating: Correct vs. Incorrect Placement
ContextIncorrect (Ignored / Penalized)Correct
Firm Organization nodeSelf-rated 5.0 stars; no visible justificationThird-party GBP/Avvo rating, sourced from real reviews, with a link to the real profile
Result/Service pageNo rating at all; visible testimonials but no schemaReal third-party reviews + aggregateRating schema matching the visible quotes
Multi-officeOne firm-wide 5.0 rating on every city pageEach city page carries that city's office GBP rating (real, location-specific)
DriftSchema says 4.9, GBP says 4.3; not updatedRegenerated from live GBP API or manual sync on every deploy

One more clarification: Google's "Detected structured data" list in the Rich Results Test will show an aggregateRating even when it is ignored for SERP ranking. The presence in the list does not mean the rating earns you a star snippet. To verify it is being used, check Google Search Console's Rich Results report — only items Google actually uses appear there. If aggregateRating appears in validator.schema.org but NOT in GSC, Google is reading it and ignoring it.

Share
Every search intent, covered

Who, what, why, when, where & how

Diagnose why my law firm's schema is valid but not earning rich results in Google

Why does validator.schema.org pass my schema but Google Rich Results Test shows warnings?

Read the Warnings and Recommended Fields sections in the Rich Results Test output. Validator.schema.org checks syntax only; the Rich Results Test checks eligibility for Google's rich-result types. Self-serving aggregateRating, missing required fields for SoftwareApplication/LegalService, and content-schema drift are the top culprits. Cross-check each warning against the visible page to find drift.
Fix my multi-office firm schema so each location gets its own correct rating

How do I ensure each office page displays that office's real Google Business Profile rating?

Pull each office's GBP rating and review count via the Google Business Profile API or manual sync. Store ratings in a per-location config or database. On each city page, render aggregateRating from that city's config, not a firm-wide default. Test with curl -A GPTBot <city-url> to confirm schema matches visible ratings.
Consolidate fragmented entity @ids across my site so Google recognizes one firm

How do I merge three different @id variants into one canonical entity?

Audit all pages with grep or a schema crawler to find every @id variant (e.g., #organization, #org, #firm). Pick one canonical @id (e.g., /#organization). Replace all variants site-wide. Declare the entity once in a root layout; reference it by @id on every other page. Test with validator.schema.org to confirm only one Organization node exists.
Ensure schema values stay in sync with visible content as my firm grows

How do I prevent schema drift when content changes?

Parameterize all dynamic values (phone, address, prices, team names). Use one config/API as the source of truth for both visible content and schema. Test before deploy: grep schema fields in the page HTML; if a field is missing, audit whether it should be visible or removed from schema. Add a pre-deploy check to your CI/CD pipeline.
InterCore · Services

Every guide in this hub

Explore the full cluster — pick any node to open its guide.

5
Services
What clients say

In their words

5.0★★★★★Excellent · 20 reviews on GoogleWrite a review
★★★★★

We tried a lot of vendors, but in less than a year, this law firm marketing agency generated tangible results.

Calyn Settle
Verified Google review · 8 months ago
★★★★★

Within 90 days we were showing up in ChatGPT and Google AI Overviews for our top practice areas. The qualified calls followed.

Managing Partner
Personal Injury firm
★★★★★

They actually understand how the AI platforms work. Our cost per signed case dropped while lead quality went up.

Founding Attorney
Family Law firm
★★★★★

As a solo, I finally compete with the billboard firms — because AI recommends me by name for DUI cases in my city.

Solo Practitioner
Criminal Defense

One verified Google review shown; the remaining quotes are representative. Past results do not guarantee future outcomes.

Scott Wiseman, CEO / Founder, InterCore Technologies · AI-Powered Marketing for Law Firms Since 2002
Scott Wiseman
CEO / Founder, InterCore Technologies · AI-Powered Marketing for Law Firms Since 2002

Scott is a former Google Marketing Director with a background in computer science and business. He helps law firms acquire clients across every search channel — SEO, PPC, and the newer generative and answer-engine categories (GEO and AEO) — improving their visibility both on Google and in the recommendations of AI systems like ChatGPT, Gemini, and Perplexity. A network engineer and software programmer by training, Scott holds a bachelor's in computer science from California State University, Northridge, an MBA from Pepperdine's Graziadio Business School, and an Applied Agentic AI certificate from Harvard Business School. He has guided law firms through every major shift — Yellow Pages to Google Ads to today's AI revolution — pioneering Generative Engine Optimization for attorneys nationwide.

Watch · Short

Why Law Firms Need GEO (Generative Engine Optimization)

100+
law firms served
18:1
avg marketing ROI
2002
law-firm-only since
More on the InterCore channel — @IntercoreAI
Sources & references

Backed by research

Google Search Central: Structured Data General GuidelinesSchema.org: Organization (specification, required and recommended fields)Schema.org: AggregateRating (definition and usage)Google Rich Results Test: Understand rich results eligibilityValidator.schema.org: JSON-LD syntax and semantic validationGoogle Search Central: Helpful Content System and Quality RatersInterCore Brain: Law Firm Schema Comprehensive Guide (internal canonical)
FAQ

Frequently asked questions

Only if it is a real, third-party rating (Google Business Profile, Avvo, Justia, etc.) that you keep synchronized with the actual source. Google ignores self-serving or unsourced ratings on Organization nodes. For multi-office firms, each location page should carry that location's real GBP rating, not a firm-wide average. Put aggregateRating on individual service/result pages with visible, real reviews.

Choose one canonical @id (e.g., "/#organization"). Find every page using a different @id variant. Replace all instances with the canonical one. Reindex the site (Google will reconcile the entities within ~1–2 weeks of recrawl). Test with validator.schema.org to confirm only one Organization node now exists in the @graph.

Yes. Google's Quality Rater Guidelines flag it as a sign of low-quality content. AI search engines read schema to understand the page, then fetch the page to verify; if they find contradictions (e.g., schema claims an FAQ that is not visible), they downgrade the page's credibility and are less likely to cite it.

No. SoftwareApplication requires operatingSystem, applicationCategory, offers, and aggregateRating. For a bare mention, use @type: "Thing" with name + sameAs (link to Wikidata or the official site). This avoids validation warnings and lets you reference without over-promising fields.

Yes. If your visible page shows the office phone number from a config constant, the schema telephone should come from the same constant. One source of truth prevents drift. Use template logic: if visible renders a field, schema renders it from the same variable.

name is a human-readable label (e.g., "Scott Wiseman"); @id is a unique identifier within the schema graph (e.g., "/#scott-wiseman#person"). Different names with the same @id refer to the same entity; different @ids with the same name create separate entities. Always use consistent @ids to link related nodes.

Grep your codebase for hardcoded numbers, phone numbers, and place names in components and templates. Move each to a config file or constants module. Update component logic to pull from the config. Test every page where the value appears. On a 50-page site, this can take hours; parameterizing from the start saves days of refactoring.

Automate it if possible. Query the Google Business Profile API (requires setup) or manually sync once per month. If manual, add a reminder to your calendar. Stale ratings are worse than no ratings — clients see the schema claim one rating and the GBP profile shows a lower one, damaging trust.

More guides
What Is Schema Markup?LegalService & Attorney SchemaFAQPage & HowTo SchemaLocalBusiness & Multi-Office Schema

Ready to be the answer AI recommends?

See exactly how ChatGPT, Google AI and Perplexity rank your firm — a 23-point report in 24 hours. No credit card.

Get my free AI visibility report →Call 213-282-3001