← back to Lawyer Directory Builder
Iter 43: OG + JSON-LD propagated to /methodology, /audit, /find-a-lawyer
ee84e9e2a86dac275efa498be053655a7c96c909 · 2026-05-04 09:13:57 -0700 · SteveStudio2
Iter 42 added share-metadata to landing only. The other 3 high-traffic
public surfaces still rendered as bare URLs in social preview cards.
Now full coverage:
/methodology.html:
- canonical, robots index/follow
- og:type=article, og:title, og:description (52-char preview), og:url
- twitter:card=summary
- JSON-LD TechArticle (datePublished/dateModified 2026-05-04, version
1.0, author + publisher Organization, mainEntityOfPage)
/audit.html:
- canonical, robots index/follow, full description meta
- og:website, og:title, og:description (mentions 1,016 audited sites,
methodology v1.0)
- twitter:card=summary
- JSON-LD Dataset (description enumerates all 12 signals,
creator+publisher, license link to /terms.html, isAccessibleForFree
true). Dataset is the right Schema.org type for an aggregated
public-firm scoring; gives Google Dataset Search eligibility.
/find-a-lawyer (and all leads.ts-served routes via the layout helper):
- og:website, og:title (page-title from layout('...')), og:description
pulls in §6155-safe boilerplate ('Independent. Not a referral
service. Not the State Bar.')
- og:locale=en_US
- twitter:card=summary
JSON-LD intentionally NOT added to find-a-lawyer routes — page is the
configurator, not a content article; SearchAction is already declared
on landing's WebSite entity.
Verified live on https://lawyers.agentabrams.com/ — all 3 surfaces
return 200 with 8-11 meta/structured-data tags each.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
M public/audit.htmlM public/methodology.htmlM src/server/leads.ts
Diff
commit ee84e9e2a86dac275efa498be053655a7c96c909
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Mon May 4 09:13:57 2026 -0700
Iter 43: OG + JSON-LD propagated to /methodology, /audit, /find-a-lawyer
Iter 42 added share-metadata to landing only. The other 3 high-traffic
public surfaces still rendered as bare URLs in social preview cards.
Now full coverage:
/methodology.html:
- canonical, robots index/follow
- og:type=article, og:title, og:description (52-char preview), og:url
- twitter:card=summary
- JSON-LD TechArticle (datePublished/dateModified 2026-05-04, version
1.0, author + publisher Organization, mainEntityOfPage)
/audit.html:
- canonical, robots index/follow, full description meta
- og:website, og:title, og:description (mentions 1,016 audited sites,
methodology v1.0)
- twitter:card=summary
- JSON-LD Dataset (description enumerates all 12 signals,
creator+publisher, license link to /terms.html, isAccessibleForFree
true). Dataset is the right Schema.org type for an aggregated
public-firm scoring; gives Google Dataset Search eligibility.
/find-a-lawyer (and all leads.ts-served routes via the layout helper):
- og:website, og:title (page-title from layout('...')), og:description
pulls in §6155-safe boilerplate ('Independent. Not a referral
service. Not the State Bar.')
- og:locale=en_US
- twitter:card=summary
JSON-LD intentionally NOT added to find-a-lawyer routes — page is the
configurator, not a content article; SearchAction is already declared
on landing's WebSite entity.
Verified live on https://lawyers.agentabrams.com/ — all 3 surfaces
return 200 with 8-11 meta/structured-data tags each.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
public/audit.html | 38 ++++++++++++++++++++++++++++++++++++++
public/methodology.html | 39 +++++++++++++++++++++++++++++++++++++++
src/server/leads.ts | 11 +++++++++++
3 files changed, 88 insertions(+)
diff --git a/public/audit.html b/public/audit.html
index 2f399a4..092e34c 100644
--- a/public/audit.html
+++ b/public/audit.html
@@ -4,6 +4,44 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Site Audit · Counsel & Bar</title>
+<meta name="description" content="Independent audit of California-licensed attorney websites against twelve published signals. 1,016 sites scored on methodology v1.0. Audit decoupled from any commercial offering.">
+<link rel="canonical" href="https://lawyers.agentabrams.com/audit.html">
+<meta name="robots" content="index, follow">
+
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="Counsel & Bar">
+<meta property="og:title" content="Site Audit · Counsel & Bar">
+<meta property="og:description" content="1,016 California-licensed attorney sites scored against twelve published signals. Methodology v1.0 — independent of any commercial offering.">
+<meta property="og:url" content="https://lawyers.agentabrams.com/audit.html">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:title" content="Site Audit · Counsel & Bar">
+<meta name="twitter:description" content="1,016 attorney sites scored. Methodology v1.0 published. Champagne-tier scoring; no traffic-light alerts next to real attorney names.">
+
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Dataset",
+ "@id": "https://lawyers.agentabrams.com/audit.html#dataset",
+ "name": "Counsel & Bar — California attorney site audits",
+ "description": "Independent audit of California-licensed attorney websites against twelve technical and presentation signals (HTTPS, mobile viewport, Open Graph image, web analytics, Schema.org markup, page weight, load time, favicon, H1 heading, phone visibility, font count, image count). Scores normalized to 0-100, refreshed on a 90-day rolling cadence.",
+ "url": "https://lawyers.agentabrams.com/audit.html",
+ "creator": {
+ "@type": "Organization",
+ "name": "Counsel & Bar",
+ "url": "https://lawyers.agentabrams.com/"
+ },
+ "publisher": {
+ "@type": "Organization",
+ "name": "Counsel & Bar",
+ "url": "https://lawyers.agentabrams.com/"
+ },
+ "license": "https://lawyers.agentabrams.com/terms.html",
+ "keywords": ["California attorneys", "site audit", "web standards", "attorney directory"],
+ "isAccessibleForFree": true
+}
+</script>
+
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
diff --git a/public/methodology.html b/public/methodology.html
index b51fe07..c0b4590 100644
--- a/public/methodology.html
+++ b/public/methodology.html
@@ -5,6 +5,45 @@
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Audit methodology · Counsel & Bar</title>
<meta name="description" content="The twelve published signals Counsel & Bar uses to score California-licensed attorney websites. Methodology v1.0 — open, technical, decoupled from any commercial offering.">
+<link rel="canonical" href="https://lawyers.agentabrams.com/methodology.html">
+<meta name="robots" content="index, follow">
+
+<meta property="og:type" content="article">
+<meta property="og:site_name" content="Counsel & Bar">
+<meta property="og:title" content="Audit methodology v1.0 · Counsel & Bar">
+<meta property="og:description" content="Twelve technical and presentation signals, weighted, bounded, refresh-cadence published. What this score is and isn't, in writing.">
+<meta property="og:url" content="https://lawyers.agentabrams.com/methodology.html">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:title" content="Audit methodology v1.0 · Counsel & Bar">
+<meta name="twitter:description" content="Twelve published signals. Bounded scope. Independent of any commercial offering.">
+
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "TechArticle",
+ "@id": "https://lawyers.agentabrams.com/methodology.html#article",
+ "headline": "Audit methodology v1.0",
+ "description": "The twelve technical and presentation signals Counsel & Bar uses to score California-licensed attorney websites. Defines tier thresholds, refresh cadence, corrections process, and explicit boundaries (not legal skill, not outcomes, not endorsement).",
+ "url": "https://lawyers.agentabrams.com/methodology.html",
+ "inLanguage": "en-US",
+ "datePublished": "2026-05-04",
+ "dateModified": "2026-05-04",
+ "version": "1.0",
+ "author": {
+ "@type": "Organization",
+ "name": "Counsel & Bar",
+ "url": "https://lawyers.agentabrams.com/"
+ },
+ "publisher": {
+ "@type": "Organization",
+ "name": "Counsel & Bar",
+ "url": "https://lawyers.agentabrams.com/"
+ },
+ "mainEntityOfPage": "https://lawyers.agentabrams.com/methodology.html"
+}
+</script>
+
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
diff --git a/src/server/leads.ts b/src/server/leads.ts
index 806e4ef..9bf8568 100644
--- a/src/server/leads.ts
+++ b/src/server/leads.ts
@@ -63,6 +63,17 @@ function layout(title: string, body: string, opts: { user?: any; variant?: 'publ
<title>${esc(title)} · Counsel & Bar</title>
<meta name="description" content="${esc(title)} on Counsel & Bar — California's indexed attorney directory, drawn from the State Bar public roll.">
<meta name="robots" content="index,follow">
+
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="Counsel & Bar">
+<meta property="og:title" content="${esc(title)} · Counsel & Bar">
+<meta property="og:description" content="California's indexed attorney directory, drawn from the State Bar public roll. Independent. Not a referral service. Not the State Bar.">
+<meta property="og:locale" content="en_US">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:title" content="${esc(title)} · Counsel & Bar">
+<meta name="twitter:description" content="California-licensed attorneys, indexed against the State Bar public roll. You choose who to call.">
+
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
← 4ff44cf Iter 42: landing — OG + Twitter card + JSON-LD structured da
·
back to Lawyer Directory Builder
·
Iter 44: OG share image (1200×630) + summary_large_image car 31d0eaf →