← back to Lawyer Directory Builder
Iter 45: SEO essentials — robots.txt, sitemap.xml, favicon (4× formats)
2ad78f2bd5b5667dc7f6c98483fc53a1f2154a55 · 2026-05-04 10:11:36 -0700 · SteveStudio2
All three were 404 in production. Google had no efficient way to crawl
the site; the methodology v1.0 audit's own signal #8 ("Favicon
present") was failing on Counsel & Bar's own site, which is the kind
of irony only a Rule 7.1 plaintiff would notice.
Files shipped:
public/robots.txt:
- Allow all by default
- Disallow /admin/, /api/, /dashboard, /login, post-payment
confirmation pages (no SEO value, surface PII to crawlers)
- Crawl-delay: 1 (gentle hint)
- Sitemap reference
public/sitemap.xml:
- 10 public surfaces with lastmod, changefreq, priority
- image:image entry on landing pointing at og.png so Google Image
can index the share tile
- Priorities: landing 1.0, find/directory 0.9, audit/methodology
0.8, upgrade/data 0.7, signup 0.6, privacy/terms 0.3
public/favicon.svg + public/favicon-32.png:
- SVG primary (CB monogram in champagne gradient on noir, scales
perfectly across pixel densities)
- PNG 32×32 fallback (Playwright-rendered from same SVG) for legacy
browsers + Apple Touch Icon
- meta name="theme-color" content="#0a0a0c" so mobile browsers tint
the URL bar to match noir background
Wired <link rel="icon" type="image/svg+xml"> + PNG fallback +
apple-touch-icon + theme-color into landing, /methodology, /audit, and
leads.ts layout (covers /find-a-lawyer + all dynamic routes).
Verified live: all four assets return 200, 3 rel=icon links per
surface.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
M public/audit.htmlA public/favicon-32.pngA public/favicon.svgM public/index.htmlM public/methodology.htmlA public/robots.txtA public/sitemap.xmlM src/server/leads.ts
Diff
commit 2ad78f2bd5b5667dc7f6c98483fc53a1f2154a55
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Mon May 4 10:11:36 2026 -0700
Iter 45: SEO essentials — robots.txt, sitemap.xml, favicon (4× formats)
All three were 404 in production. Google had no efficient way to crawl
the site; the methodology v1.0 audit's own signal #8 ("Favicon
present") was failing on Counsel & Bar's own site, which is the kind
of irony only a Rule 7.1 plaintiff would notice.
Files shipped:
public/robots.txt:
- Allow all by default
- Disallow /admin/, /api/, /dashboard, /login, post-payment
confirmation pages (no SEO value, surface PII to crawlers)
- Crawl-delay: 1 (gentle hint)
- Sitemap reference
public/sitemap.xml:
- 10 public surfaces with lastmod, changefreq, priority
- image:image entry on landing pointing at og.png so Google Image
can index the share tile
- Priorities: landing 1.0, find/directory 0.9, audit/methodology
0.8, upgrade/data 0.7, signup 0.6, privacy/terms 0.3
public/favicon.svg + public/favicon-32.png:
- SVG primary (CB monogram in champagne gradient on noir, scales
perfectly across pixel densities)
- PNG 32×32 fallback (Playwright-rendered from same SVG) for legacy
browsers + Apple Touch Icon
- meta name="theme-color" content="#0a0a0c" so mobile browsers tint
the URL bar to match noir background
Wired <link rel="icon" type="image/svg+xml"> + PNG fallback +
apple-touch-icon + theme-color into landing, /methodology, /audit, and
leads.ts layout (covers /find-a-lawyer + all dynamic routes).
Verified live: all four assets return 200, 3 rel=icon links per
surface.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
public/audit.html | 4 +++
public/favicon-32.png | Bin 0 -> 3093 bytes
public/favicon.svg | 12 +++++++++
public/index.html | 4 +++
public/methodology.html | 4 +++
public/robots.txt | 21 +++++++++++++++
public/sitemap.xml | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
src/server/leads.ts | 4 +++
8 files changed, 117 insertions(+)
diff --git a/public/audit.html b/public/audit.html
index 46d836a..9b30fff 100644
--- a/public/audit.html
+++ b/public/audit.html
@@ -7,6 +7,10 @@
<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">
+<link rel="icon" type="image/svg+xml" href="/favicon.svg">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
+<link rel="apple-touch-icon" href="/favicon-32.png">
+<meta name="theme-color" content="#0a0a0c">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Counsel & Bar">
diff --git a/public/favicon-32.png b/public/favicon-32.png
new file mode 100644
index 0000000..b5f2faf
Binary files /dev/null and b/public/favicon-32.png differ
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..fcbc521
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
+ <defs>
+ <linearGradient id="fav-metal" x1="0" y1="0" x2="0" y2="1">
+ <stop offset="0%" stop-color="#d4b683"/>
+ <stop offset="50%" stop-color="#b89968"/>
+ <stop offset="100%" stop-color="#8a7044"/>
+ </linearGradient>
+ </defs>
+ <rect width="32" height="32" fill="#0a0a0c"/>
+ <circle cx="16" cy="16" r="14" fill="none" stroke="url(#fav-metal)" stroke-width="1.2"/>
+ <path fill="url(#fav-metal)" transform="translate(2 2)" d="M9.6 9.5c-1.6 0-2.7 1.2-2.7 3v3c0 1.8 1.1 3 2.7 3 1.4 0 2.4-.8 2.6-2.1h-1.3c-.1.6-.6 1-1.3 1-.9 0-1.4-.6-1.4-1.7v-2.4c0-1.1.5-1.7 1.4-1.7.7 0 1.2.4 1.3 1h1.3c-.2-1.3-1.2-2.1-2.6-2.1zm5.5.1v8.7h2.7c1.6 0 2.6-.9 2.6-2.4 0-1-.5-1.7-1.3-2 .7-.3 1.1-1 1.1-1.8 0-1.5-1-2.5-2.5-2.5h-2.6zm1.3 1.1h1.2c.8 0 1.4.5 1.4 1.4 0 .9-.5 1.4-1.4 1.4h-1.2v-2.8zm0 3.9h1.4c.9 0 1.4.6 1.4 1.5s-.5 1.5-1.4 1.5h-1.4V14.6z"/>
+</svg>
diff --git a/public/index.html b/public/index.html
index 43caedb..7f13f61 100644
--- a/public/index.html
+++ b/public/index.html
@@ -7,6 +7,10 @@
<meta name="description" content="An indexed directory of every licensed California attorney, drawn from the State Bar public roll. 89,000+ profiles, 42,000+ firms, 1,000+ independently audited sites. Browse, verify, contact directly.">
<link rel="canonical" href="https://lawyers.agentabrams.com/">
<meta name="robots" content="index, follow">
+<link rel="icon" type="image/svg+xml" href="/favicon.svg">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
+<link rel="apple-touch-icon" href="/favicon-32.png">
+<meta name="theme-color" content="#0a0a0c">
<!-- Open Graph -->
<meta property="og:type" content="website">
diff --git a/public/methodology.html b/public/methodology.html
index 0c47a6d..f747111 100644
--- a/public/methodology.html
+++ b/public/methodology.html
@@ -7,6 +7,10 @@
<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">
+<link rel="icon" type="image/svg+xml" href="/favicon.svg">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
+<link rel="apple-touch-icon" href="/favicon-32.png">
+<meta name="theme-color" content="#0a0a0c">
<meta property="og:type" content="article">
<meta property="og:site_name" content="Counsel & Bar">
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..9530c09
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,21 @@
+# Counsel & Bar — robots.txt
+# Independent California attorney directory. Not a lawyer referral service. Not the State Bar.
+
+User-agent: *
+Allow: /
+Disallow: /admin
+Disallow: /admin/
+Disallow: /api/
+Disallow: /dashboard
+Disallow: /login
+Disallow: /signup/welcome
+Disallow: /upgrade/thanks
+Disallow: /find-a-lawyer/thanks
+Disallow: /data/thanks
+Disallow: /data/download/
+
+# Crawl rate hint (gentle)
+Crawl-delay: 1
+
+# Sitemap
+Sitemap: https://lawyers.agentabrams.com/sitemap.xml
diff --git a/public/sitemap.xml b/public/sitemap.xml
new file mode 100644
index 0000000..c27505d
--- /dev/null
+++ b/public/sitemap.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
+ xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
+ <url>
+ <loc>https://lawyers.agentabrams.com/</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>weekly</changefreq>
+ <priority>1.0</priority>
+ <image:image>
+ <image:loc>https://lawyers.agentabrams.com/og.png</image:loc>
+ <image:title>Counsel & Bar — every California-licensed attorney, indexed</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/find-a-lawyer</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>weekly</changefreq>
+ <priority>0.9</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/directory</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>weekly</changefreq>
+ <priority>0.9</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/audit.html</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>weekly</changefreq>
+ <priority>0.8</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/methodology.html</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>monthly</changefreq>
+ <priority>0.8</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/upgrade</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>monthly</changefreq>
+ <priority>0.7</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/data</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>monthly</changefreq>
+ <priority>0.7</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/signup</loc>
+ <lastmod>2026-05-04</lastmod>
+ <changefreq>monthly</changefreq>
+ <priority>0.6</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/privacy.html</loc>
+ <lastmod>2026-05-03</lastmod>
+ <changefreq>yearly</changefreq>
+ <priority>0.3</priority>
+ </url>
+ <url>
+ <loc>https://lawyers.agentabrams.com/terms.html</loc>
+ <lastmod>2026-05-03</lastmod>
+ <changefreq>yearly</changefreq>
+ <priority>0.3</priority>
+ </url>
+</urlset>
diff --git a/src/server/leads.ts b/src/server/leads.ts
index 9a95d3e..72bc2a7 100644
--- a/src/server/leads.ts
+++ b/src/server/leads.ts
@@ -63,6 +63,10 @@ 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">
+<link rel="icon" type="image/svg+xml" href="/favicon.svg">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
+<link rel="apple-touch-icon" href="/favicon-32.png">
+<meta name="theme-color" content="#0a0a0c">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Counsel & Bar">
← 31d0eaf Iter 44: OG share image (1200×630) + summary_large_image car
·
back to Lawyer Directory Builder
·
tighten .gitignore: add missing standing-rule patterns (buil 1e3890c →