Add SEO: sitemap.xml, robots.txt, meta tags + structured data
- sitemap.xml (homepage) + robots.txt (allow crawl, disallow /api/, link sitemap) - <head>: SEO title, meta description, keywords, canonical, robots - Open Graph + Twitter Card tags for link previews - JSON-LD WebApplication structured data (features, free, publisher) - <noscript> crawlable content so the JS-rendered SPA has indexable text - SW cache v11 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e075629d4d
commit
5d41ed72f4
4 changed files with 83 additions and 3 deletions
|
|
@ -4,7 +4,52 @@
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||||
<meta name="theme-color" content="#0B0B09" />
|
<meta name="theme-color" content="#0B0B09" />
|
||||||
<title>Cipher — a Radical Party project</title>
|
<title>Cipher — Free End-to-End Encrypted Messenger | Private Chat, Calls & Groups</title>
|
||||||
|
<meta name="description" content="Cipher is a free, private, end-to-end encrypted messenger. Signal-grade encrypted 1:1 and group chats, voice & video calls, and disappearing messages — your keys never leave your device. No phone number required." />
|
||||||
|
<meta name="keywords" content="encrypted messenger, end-to-end encryption, private messaging, secure chat, encrypted calls, disappearing messages, Signal alternative, WhatsApp alternative, E2E encryption, private group chat" />
|
||||||
|
<meta name="author" content="Radical Party" />
|
||||||
|
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||||
|
<link rel="canonical" href="https://cipher.theradicalparty.com/" />
|
||||||
|
|
||||||
|
<!-- Open Graph / social -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:site_name" content="Cipher" />
|
||||||
|
<meta property="og:title" content="Cipher — Free End-to-End Encrypted Messenger" />
|
||||||
|
<meta property="og:description" content="Private, end-to-end encrypted chats, groups, and voice & video calls. Your keys never leave your device. No phone number required." />
|
||||||
|
<meta property="og:url" content="https://cipher.theradicalparty.com/" />
|
||||||
|
<meta property="og:image" content="https://cipher.theradicalparty.com/icons/icon.svg" />
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
<meta name="twitter:title" content="Cipher — Free End-to-End Encrypted Messenger" />
|
||||||
|
<meta name="twitter:description" content="Private, end-to-end encrypted chats, groups, and voice & video calls. Your keys never leave your device." />
|
||||||
|
<meta name="twitter:image" content="https://cipher.theradicalparty.com/icons/icon.svg" />
|
||||||
|
|
||||||
|
<!-- Structured data: helps Google understand this is a messaging web app -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "WebApplication",
|
||||||
|
"name": "Cipher",
|
||||||
|
"url": "https://cipher.theradicalparty.com/",
|
||||||
|
"applicationCategory": "CommunicationApplication",
|
||||||
|
"operatingSystem": "Web, iOS, Android, Windows, macOS, Linux",
|
||||||
|
"browserRequirements": "Requires JavaScript. Requires a modern browser.",
|
||||||
|
"description": "Cipher is a free, end-to-end encrypted messenger with private 1:1 and group chats, encrypted voice and video calls, and disappearing messages. Private keys are generated on-device and never sent to the server.",
|
||||||
|
"isAccessibleForFree": true,
|
||||||
|
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
|
||||||
|
"featureList": [
|
||||||
|
"End-to-end encryption (Signal Protocol)",
|
||||||
|
"Private one-to-one and group chats",
|
||||||
|
"Encrypted voice and video calls",
|
||||||
|
"Disappearing messages",
|
||||||
|
"Read receipts",
|
||||||
|
"Group invite links",
|
||||||
|
"Multi-device with QR linking",
|
||||||
|
"No phone number required"
|
||||||
|
],
|
||||||
|
"publisher": { "@type": "Organization", "name": "Radical Party" }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<link rel="manifest" href="/manifest.webmanifest" />
|
<link rel="manifest" href="/manifest.webmanifest" />
|
||||||
<link rel="icon" href="/icons/icon.svg" type="image/svg+xml" />
|
<link rel="icon" href="/icons/icon.svg" type="image/svg+xml" />
|
||||||
<link rel="apple-touch-icon" href="/icons/icon.svg" />
|
<link rel="apple-touch-icon" href="/icons/icon.svg" />
|
||||||
|
|
@ -267,7 +312,26 @@
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app">
|
||||||
|
<!-- Server-visible content for crawlers / no-JS. The real app hydrates over this. -->
|
||||||
|
<noscript>
|
||||||
|
<h1>Cipher — Free End-to-End Encrypted Messenger</h1>
|
||||||
|
<p>Cipher is a free, private messenger with end-to-end encryption built on the
|
||||||
|
Signal Protocol. Chat one-to-one or in groups, make encrypted voice and video
|
||||||
|
calls, and send disappearing messages. Your private keys are generated on your
|
||||||
|
device and never leave it — the server only ever relays ciphertext.</p>
|
||||||
|
<h2>Features</h2>
|
||||||
|
<ul>
|
||||||
|
<li>End-to-end encrypted 1:1 and group chats</li>
|
||||||
|
<li>Encrypted voice and video calls</li>
|
||||||
|
<li>Disappearing messages and read receipts</li>
|
||||||
|
<li>Shareable group invite links</li>
|
||||||
|
<li>Multi-device sync with QR linking</li>
|
||||||
|
<li>No phone number required</li>
|
||||||
|
</ul>
|
||||||
|
<p>Cipher requires JavaScript. Please enable it to sign in or create an account.</p>
|
||||||
|
</noscript>
|
||||||
|
</div>
|
||||||
<script type="module" src="/js/app.js"></script>
|
<script type="module" src="/js/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
7
public/robots.txt
Normal file
7
public/robots.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Cipher — allow crawling of the public app shell; keep the API out of the index.
|
||||||
|
# JS/CSS are intentionally crawlable so Google can render the single-page app.
|
||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
Disallow: /api/
|
||||||
|
|
||||||
|
Sitemap: https://cipher.theradicalparty.com/sitemap.xml
|
||||||
9
public/sitemap.xml
Normal file
9
public/sitemap.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://cipher.theradicalparty.com/</loc>
|
||||||
|
<lastmod>2026-07-22</lastmod>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Service worker: offline app shell + Web Push wake-up.
|
// Service worker: offline app shell + Web Push wake-up.
|
||||||
// It never touches message plaintext — decryption happens only in the page.
|
// It never touches message plaintext — decryption happens only in the page.
|
||||||
|
|
||||||
const CACHE = "cipher-v10";
|
const CACHE = "cipher-v11";
|
||||||
const SHELL = [
|
const SHELL = [
|
||||||
"/",
|
"/",
|
||||||
"/index.html",
|
"/index.html",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue