[object Object]

← 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

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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; Bar</title>
 <meta name="description" content="${esc(title)} on Counsel &amp; 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 &amp; 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 →