From bdde3f30d46366334a6d718dd7b8383e5e5797d1 Mon Sep 17 00:00:00 2001 From: zahlekhan Date: Sun, 7 Jun 2026 23:05:02 +0530 Subject: [PATCH] feat(docs): improve SEO metadata, structured data, and crawlability Organic search is the docs site's #2 traffic channel and growing fast, but several gaps were leaking that growth. This adds: - Sitemap: include /openclaw-os (a top page that was missing), use real blog publish dates for lastmod, and set monthly changefreq for blog posts - Blog posts: dynamic per-post OG images (mirrors the existing docs OG route), plus full og:type=article / Twitter card / canonical metadata - Docs pages: explicit canonical, article OG, and Twitter card - Playground: page-specific title/description/canonical (was inheriting the generic homepage title) - JSON-LD: SoftwareApplication + Organization (home), BlogPosting + breadcrumbs (blog), TechArticle + breadcrumbs (docs) - PWA manifest and proper PNG icons (apple-touch-icon, 192/512, favicon-32) - Global: @thesysdev Twitter handle, og:locale, themeColor viewport Generated-By: PostHog Code Task-Id: 134200f7-d774-431c-b7b4-ff6281467d1a --- docs/app/(home)/page.tsx | 25 +++++++++++++ docs/app/blog/[slug]/page.tsx | 52 +++++++++++++++++++++++++- docs/app/docs/[[...slug]]/page.tsx | 54 ++++++++++++++++++++++++++- docs/app/layout.tsx | 19 ++++++++-- docs/app/manifest.ts | 19 ++++++++++ docs/app/og/blog/[...slug]/route.tsx | 27 ++++++++++++++ docs/app/playground/layout.tsx | 22 +++++++++++ docs/app/sitemap.ts | 6 +-- docs/components/seo/JsonLd.tsx | 13 +++++++ docs/lib/source.ts | 9 +++++ docs/public/apple-touch-icon.png | Bin 0 -> 9075 bytes docs/public/favicon-32.png | Bin 0 -> 874 bytes docs/public/icon-192.png | Bin 0 -> 9566 bytes docs/public/icon-512.png | Bin 0 -> 29146 bytes 14 files changed, 238 insertions(+), 8 deletions(-) create mode 100644 docs/app/manifest.ts create mode 100644 docs/app/og/blog/[...slug]/route.tsx create mode 100644 docs/components/seo/JsonLd.tsx create mode 100644 docs/public/apple-touch-icon.png create mode 100644 docs/public/favicon-32.png create mode 100644 docs/public/icon-192.png create mode 100644 docs/public/icon-512.png diff --git a/docs/app/(home)/page.tsx b/docs/app/(home)/page.tsx index b49a4e581..3348a1fd4 100644 --- a/docs/app/(home)/page.tsx +++ b/docs/app/(home)/page.tsx @@ -1,3 +1,5 @@ +import { JsonLd } from "@/components/seo/JsonLd"; +import { BASE_URL } from "@/lib/source"; import styles from "./page.module.css"; import { CompatibilitySection } from "./sections/CompatibilitySection/CompatibilitySection"; import { FeaturesSection } from "./sections/FeaturesSection/FeaturesSection"; @@ -9,9 +11,32 @@ import { ShiroMascot } from "./sections/ShiroMascot/ShiroMascot"; import { StepsSection } from "./sections/StepsSection/StepsSection"; import { TweetWallSection } from "./sections/TweetWallSection/TweetWallSection"; +const jsonLd = [ + { + "@context": "https://schema.org", + "@type": "Organization", + name: "OpenUI", + url: BASE_URL, + logo: `${BASE_URL}/favicon.svg`, + sameAs: ["https://github.com/thesysdev/openui", "https://discord.com/invite/Pbv5PsqUSv"], + }, + { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + name: "OpenUI", + applicationCategory: "DeveloperApplication", + operatingSystem: "Web", + url: BASE_URL, + description: + "OpenUI is a full-stack Generative UI framework with a compact streaming-first language, a React runtime with built-in components, and ready-to-use chat interfaces.", + offers: { "@type": "Offer", price: "0", priceCurrency: "USD" }, + }, +]; + export default function HomePage() { return (
+
+