From 1f5a1177a2c477dfe4c1c71d04cbd9088249722c Mon Sep 17 00:00:00 2001 From: tym83 <6355522@gmail.com> Date: Fri, 8 May 2026 23:02:51 +0500 Subject: [PATCH 1/3] feat(seo): add Sitemap directive to robots.txt The default Hugo-generated robots.txt only contained `User-agent: *` with no Sitemap declaration. Search engines could find the sitemap by direct probe, but Bing and Yandex rely on the directive to discover it reliably. Adding a Sitemap line makes the canonical sitemap location explicit to all crawlers. Co-Authored-By: Claude Signed-off-by: tym83 <6355522@gmail.com> --- layouts/robots.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 layouts/robots.txt diff --git a/layouts/robots.txt b/layouts/robots.txt new file mode 100644 index 00000000..f6e10c52 --- /dev/null +++ b/layouts/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: {{ "/sitemap.xml" | absURL }} From c846a4c019ff89a8465f38d545f5d601aa463fd5 Mon Sep 17 00:00:00 2001 From: tym83 <6355522@gmail.com> Date: Fri, 8 May 2026 23:03:08 +0500 Subject: [PATCH 2/3] feat(seo): add canonical link, JSON-LD schemas, noindex legacy doc versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The site previously emitted no canonical link tag and no structured data. Pages across legacy documentation versions (v0, v1.0, v1.1) duplicate the latest version's content but had no dedup signals, so search engines split ranking authority across all five copies. Changes: - Emit `` pointing to the page's own permalink for every page outside legacy doc versions. - Emit `` on legacy doc-version pages (any version present in `params.versions[]` whose `id` is neither `params.latest_version_id` nor `next`). Pages remain reachable for users following links; they no longer compete with the current version for ranking. - Inline JSON-LD `Organization` schema on every page so search engines can build a consistent knowledge entity for Cozystack (CNCF Landscape, GitHub, Slack, Telegram in `sameAs`). - Inline JSON-LD `WebSite` on the homepage to expose the site's name, URL, and description to AI search and rich result generators. - Inline JSON-LD `BlogPosting` on single blog posts with title, description, dates, author, image, and publisher — required for Google Discover eligibility and AI Overview citation. Co-Authored-By: Claude Signed-off-by: tym83 <6355522@gmail.com> --- layouts/partials/hooks/head-end.html | 84 ++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/layouts/partials/hooks/head-end.html b/layouts/partials/hooks/head-end.html index c852cfd9..bf47cc93 100644 --- a/layouts/partials/hooks/head-end.html +++ b/layouts/partials/hooks/head-end.html @@ -9,3 +9,87 @@ {{ with .Site.Params.ahrefsAnalytics }} {{ end }} + +{{/* SEO: canonical + noindex for legacy doc versions. + Older non-latest doc versions (v0, v1.0, v1.1, …) duplicate content from + the latest version (v1.2). Without dedup signals, search engines split + ranking signals across all five copies. We mark old versions as noindex + (still crawlable for users following links) and canonicalize current + pages to themselves. */}} +{{- $latestVersion := .Site.Params.latest_version_id | default "v1.2" -}} +{{- $isOldDocsVersion := false -}} +{{- range .Site.Params.versions -}} + {{- if and .id (ne .id $latestVersion) (ne .id "next") -}} + {{- if in $.RelPermalink (printf "/docs/%s/" .id) -}} + {{- $isOldDocsVersion = true -}} + {{- end -}} + {{- end -}} +{{- end -}} +{{- if $isOldDocsVersion }} + +{{- else }} + +{{- end }} + +{{/* JSON-LD Organization (every page) */}} + + +{{/* JSON-LD WebSite (homepage only) */}} +{{- if .IsHome }} + +{{- end }} + +{{/* JSON-LD BlogPosting (single blog posts) */}} +{{- if and (eq .Section "blog") (not .IsSection) (not .IsHome) }} + +{{- end }} From cb5490b3093b1062d2be4bbcbd96038e94a0afa1 Mon Sep 17 00:00:00 2001 From: tym83 <6355522@gmail.com> Date: Fri, 8 May 2026 23:03:23 +0500 Subject: [PATCH 3/3] feat(seo): improve site and section meta descriptions for keyword coverage Section index pages and the site default `params.description` carried generic blurbs ("Free Cloud Platform based on Kubernetes", "Operational guides on the storage subsystem") with little keyword overlap with the actual content. Search snippets from these pages gave little context to scanning users and missed terms that real queries use ("KubeVirt", "LINSTOR", "VictoriaMetrics", "managed PostgreSQL", "Cilium eBPF"). Updates: - Site default description now covers the platform's main capability set (VMs, managed databases, S3, GPU) and its CNCF Sandbox status. - v1.2 docs root, applications, virtualization, storage, networking, and operations section indexes each get descriptions naming the underlying components and concrete services they document. Each description stays under ~155 characters to fit a typical SERP snippet without truncation. Co-Authored-By: Claude Signed-off-by: tym83 <6355522@gmail.com> --- content/en/docs/v1.2/_index.md | 2 +- content/en/docs/v1.2/applications/_index.md | 2 +- content/en/docs/v1.2/networking/_index.md | 2 +- content/en/docs/v1.2/operations/_index.md | 2 +- content/en/docs/v1.2/storage/_index.md | 2 +- content/en/docs/v1.2/virtualization/_index.md | 2 +- hugo.yaml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/en/docs/v1.2/_index.md b/content/en/docs/v1.2/_index.md index 8c7c8025..01c5c985 100644 --- a/content/en/docs/v1.2/_index.md +++ b/content/en/docs/v1.2/_index.md @@ -1,7 +1,7 @@ --- title: "Cozystack v1.2 Documentation" linkTitle: "Cozystack v1.2" -description: "Free PaaS platform and framework for building clouds" +description: "Cozystack v1.2 documentation — install, configure, and operate the open-source cloud platform on Kubernetes for VMs, managed databases, S3, and GPU." taxonomyCloud: [] cascade: type: docs diff --git a/content/en/docs/v1.2/applications/_index.md b/content/en/docs/v1.2/applications/_index.md index 84ad58e3..94c2487a 100644 --- a/content/en/docs/v1.2/applications/_index.md +++ b/content/en/docs/v1.2/applications/_index.md @@ -1,7 +1,7 @@ --- title: "Managed Applications: Guides and Reference" linkTitle: "Managed Applications" -description: "Learn how to deploy, configure, access, and backup managed applications in Cozystack." +description: "Reference and guides for managed PostgreSQL, MySQL, Redis, RabbitMQ, Kafka, ClickHouse, OpenSearch, MongoDB, and other database services in Cozystack." weight: 45 aliases: - /docs/v1.2/components diff --git a/content/en/docs/v1.2/networking/_index.md b/content/en/docs/v1.2/networking/_index.md index 3e15e8fb..42a18a60 100644 --- a/content/en/docs/v1.2/networking/_index.md +++ b/content/en/docs/v1.2/networking/_index.md @@ -1,7 +1,7 @@ --- title: "Networking Capabilities" linkTitle: "Networking" -description: "Network configuration, virtual routers, load balancers, and other networking capabilities in Cozystack." +description: "Cilium eBPF networking in Cozystack — virtual routers, load balancers, MetalLB, BGP, and tenant network isolation." weight: 60 --- diff --git a/content/en/docs/v1.2/operations/_index.md b/content/en/docs/v1.2/operations/_index.md index de4a8fdc..1bbbbedc 100644 --- a/content/en/docs/v1.2/operations/_index.md +++ b/content/en/docs/v1.2/operations/_index.md @@ -1,7 +1,7 @@ --- title: "Cluster Configuration and Management Guide" linkTitle: "Operations Guide" -description: "Configure, monitor, secure, and upgrade a Cozystack cluster." +description: "Operate Cozystack at scale — cluster configuration, observability with VictoriaMetrics and VictoriaLogs, backup with Velero, upgrades, and security hardening." weight: 35 --- diff --git a/content/en/docs/v1.2/storage/_index.md b/content/en/docs/v1.2/storage/_index.md index 11f7e28e..c84f969a 100644 --- a/content/en/docs/v1.2/storage/_index.md +++ b/content/en/docs/v1.2/storage/_index.md @@ -1,7 +1,7 @@ --- title: "Storage Subsystem Guides" linkTitle: "Storage" -description: "Operational guides on the storage subsystem" +description: "Storage in Cozystack — LINSTOR replicated block storage, Rook-Ceph integration, snapshots, and per-database persistent volume management." weight: 55 aliases: - /docs/v1.2/operations/storage diff --git a/content/en/docs/v1.2/virtualization/_index.md b/content/en/docs/v1.2/virtualization/_index.md index bf56e4b1..ff458999 100644 --- a/content/en/docs/v1.2/virtualization/_index.md +++ b/content/en/docs/v1.2/virtualization/_index.md @@ -1,7 +1,7 @@ --- title: "Virtualization Features in Cozystack" linkTitle: "Virtualization" -description: "Everything about deploying, configuring, and using virtual machines in Cozystack." +description: "KubeVirt-based virtual machines in Cozystack — provision, scale, snapshot, and live-migrate VMs alongside containers on the same Kubernetes cluster." weight: 50 aliases: - /docs/v1.2/operations/virtualization diff --git a/hugo.yaml b/hugo.yaml index 5b0f1372..918057bd 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -115,7 +115,7 @@ permalinks: params: - description: Free Cloud Platform based on Kubernetes + description: Cozystack — open-source cloud platform on Kubernetes for managed VMs, databases, S3 storage, and GPU workloads. CNCF Sandbox project. copyright: Cozystack a Series of LF Projects, LLC ahrefsAnalytics: sEZ/gu88M21DndmPulYRFw github_repo: https://github.com/cozystack/website