Files
deepstock/index.html
Dorian 425e56c0ca feat: SEO crawlability + on-brand copy
Make every served byte crawlable without executing JS, remove off-brand
copy, and cut third-party requests.

- Copy: replace off-brand terms (survival/crisis/collapse) in title, meta,
  OG/Twitter, JSON-LD and webmanifest with on-brand preparedness copy.
  Update App.vue i18n page_title/meta_description (EN+DE) too, since the app
  overwrites the head at runtime. Reconcile area count to the real 6.
- Prerender: vite-plugin-seo-snapshot injects a static <noscript> snapshot
  (real <h1>, content, <a href>) after #app. JS users ignore <noscript>, so
  the live app/UX is unchanged; curl/no-JS crawlers get real content.
- 404: nginx now returns true 404s on unknown paths (no soft-200 SPA
  fallback) with a branded 404 page.
- Sitemap: drop no-op hreflang alternates, add <lastmod>.
- Fonts: self-host Space Mono / DM Serif Display / Barlow (woff2, latin +
  latin-ext, font-display: swap); preload above-the-fold faces. No more
  fonts.googleapis/gstatic requests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 08:20:19 +01:00

91 lines
4.6 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
<!-- ── Primary meta ─────────────────────────────────────────────── -->
<title>Plan-B — AI-Assisted Preparedness for Urban Households</title>
<meta name="description" content="A calm, costed preparedness plan for your household in about 10 minutes. Check your readiness across 6 areas like water, energy and food, built on economics not fear."/>
<meta name="author" content="Plan-B"/>
<meta name="theme-color" content="#5A9A78"/>
<meta name="color-scheme" content="light"/>
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1"/>
<link rel="canonical" href="https://plan-b.now/"/>
<!-- ── Open Graph (Facebook, LinkedIn, WhatsApp, Signal, Telegram…) ─ -->
<meta property="og:type" content="website"/>
<meta property="og:site_name" content="Plan-B"/>
<meta property="og:title" content="Plan-B — AI-Assisted Preparedness for Urban Households"/>
<meta property="og:description" content="Find out where your household is exposed and get a clear, costed 90-day plan. Water, energy, food and more, made for city apartments."/>
<meta property="og:url" content="https://plan-b.now/"/>
<meta property="og:image" content="https://plan-b.now/images/og-image.png"/>
<meta property="og:image:secure_url" content="https://plan-b.now/images/og-image.png"/>
<meta property="og:image:type" content="image/png"/>
<meta property="og:image:width" content="1200"/>
<meta property="og:image:height" content="630"/>
<meta property="og:image:alt" content="Plan-B — AI-Assisted Preparedness for Urban Households"/>
<meta property="og:locale" content="en_US"/>
<meta property="og:locale:alternate" content="de_DE"/>
<!-- ── Twitter / X ─────────────────────────────────────────────── -->
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:title" content="Plan-B — AI-Assisted Preparedness for Urban Households"/>
<meta name="twitter:description" content="A calm, costed 90-day preparedness plan for your household. Made for city apartments."/>
<meta name="twitter:image" content="https://plan-b.now/images/og-image.png"/>
<meta name="twitter:image:alt" content="Plan-B — AI-Assisted Preparedness for Urban Households"/>
<!-- ── Icons / PWA ─────────────────────────────────────────────── -->
<link rel="icon" href="/images/favicon.svg" type="image/svg+xml"/>
<link rel="icon" href="/images/favicon-32.png" sizes="32x32" type="image/png"/>
<link rel="icon" href="/images/favicon-16.png" sizes="16x16" type="image/png"/>
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png"/>
<link rel="manifest" href="/site.webmanifest"/>
<!-- ── Fonts (self-hosted — no third-party requests) ───────────── -->
<link rel="preload" href="/fonts/barlow-400-latin.woff2" as="font" type="font/woff2" crossorigin/>
<link rel="preload" href="/fonts/dm-serif-display-400-latin.woff2" as="font" type="font/woff2" crossorigin/>
<link rel="preload" href="/fonts/space-mono-400-latin.woff2" as="font" type="font/woff2" crossorigin/>
<link rel="stylesheet" href="/fonts/fonts.css"/>
<!-- ── Structured data (Google rich results) ───────────────────── -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://plan-b.now/#website",
"url": "https://plan-b.now/",
"name": "Plan-B",
"description": "AI-assisted preparedness for urban households.",
"inLanguage": ["en", "de"],
"publisher": { "@id": "https://plan-b.now/#org" }
},
{
"@type": "Organization",
"@id": "https://plan-b.now/#org",
"name": "Plan-B",
"url": "https://plan-b.now/",
"logo": "https://plan-b.now/images/icon-512.png"
},
{
"@type": "WebApplication",
"name": "Plan-B Preparedness Advisor",
"url": "https://plan-b.now/",
"applicationCategory": "LifestyleApplication",
"operatingSystem": "Web",
"browserRequirements": "Requires JavaScript.",
"inLanguage": ["en", "de"],
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "EUR" }
}
]
}
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>