feat: add SEO metadata, llms.txt, and markdown page mirrors

Centralize site metadata and social URLs for JSON-LD, expose llmstxt.org
content and per-page .md routes for LLM crawlers, and refactor blog/FAQ/events
pages with shared components.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
bbe
2026-06-29 00:59:41 +02:00
co-authored by Cursor
parent 99380ef6aa
commit 6023991f5c
27 changed files with 1082 additions and 401 deletions
+8 -2
View File
@@ -14,18 +14,21 @@ export function JsonLd({ data }: JsonLdProps) {
const siteUrl =
process.env.NEXT_PUBLIC_SITE_URL || "https://belgianbitcoinembassy.org";
export function OrganizationJsonLd() {
export function OrganizationJsonLd({ sameAs }: { sameAs?: string[] } = {}) {
const sameAsUrls =
sameAs && sameAs.length > 0 ? sameAs : ["https://t.me/belgianbitcoinembassy"];
return (
<JsonLd
data={{
"@context": "https://schema.org",
"@type": "Organization",
"@id": `${siteUrl}/#organization`,
name: "Belgian Bitcoin Embassy",
url: siteUrl,
logo: `${siteUrl}/og-default.png`,
description:
"Discover Bitcoin meetups across Belgium. Real conversations, education, and a strong local community.",
sameAs: ["https://t.me/belgianbitcoinembassy"],
sameAs: sameAsUrls,
address: {
"@type": "PostalAddress",
addressLocality: "Antwerp",
@@ -103,6 +106,7 @@ interface EventJsonLdProps {
name: string;
description?: string;
startDate: string;
endDate?: string;
location?: string;
url: string;
imageUrl?: string;
@@ -114,6 +118,7 @@ export function EventJsonLd({
name,
description,
startDate,
endDate,
location,
url,
imageUrl,
@@ -130,6 +135,7 @@ export function EventJsonLd({
name,
description: description || `Bitcoin meetup: ${name}`,
startDate,
...(endDate ? { endDate } : {}),
eventAttendanceMode: "https://schema.org/OfflineEventAttendanceMode",
eventStatus: "https://schema.org/EventScheduled",
...(location