Skip to content

Commit 58b4a54

Browse files
authored
feat(seo): canonical, JSON-LD, sitemap directive, richer meta descriptions (#533)
## Summary Adds the missing technical-SEO scaffolding to cozystack.io plus AI-search optimization (GEO). The site is currently indexable but emits no canonical link, no structured data, no AI-crawler discovery file, and lets five duplicate doc-version copies (v0, v1.0, v1.1, v1.2, next) compete for the same ranking signals. This PR addresses the highest-leverage fixes without changing site architecture or adding any vendor-specific outbound links. ## What changed ### Technical SEO - **`layouts/robots.txt`** — adds an explicit `Sitemap:` directive so Bing, Yandex, and other crawlers discover the sitemap reliably. - **`layouts/partials/hooks/head-end.html`**: - Emits `<link rel="canonical">` pointing to each page's permalink. - Emits `<meta name="robots" content="noindex, follow">` on legacy doc versions. Pages stay reachable via direct link; they no longer compete with the current version for ranking authority. - Inlines JSON-LD `Organization` (every page) — name, URL, logo, description, foundingDate, `sameAs` (GitHub, CNCF Landscape, Slack, Telegram). - Inlines JSON-LD `WebSite` on the homepage — eligibility for sitelinks searchbox. - Inlines JSON-LD `BlogPosting` on single blog posts — eligibility for Google Discover and AI Overview citation. ### AI search optimization (GEO) - **`static/llms.txt`** — vendor-neutral guide for AI crawlers (Anthropic, OpenAI, Perplexity). Describes the project, docs structure, releases, community, authoritative facts. No marketing content; no funnel-links. - **`layouts/partials/hooks/head-end.html`** — adds JSON-LD `SoftwareApplication` on homepage. Helps AI engines classify Cozystack correctly when answering "what is Cozystack" type queries (Apache 2.0 license, free offer, dependency hints). ### Content - **`hugo.yaml`** — `params.description` rewritten to cover the platform's core capability surface (VMs, managed databases, S3, GPU) and the CNCF Sandbox status. - **`content/en/docs/v1.2/{,applications,virtualization,storage,networking,operations}/_index.md`** — `description` frontmatter rewritten on each section index to name the underlying components (KubeVirt, LINSTOR, Cilium eBPF, VictoriaMetrics, Velero, etc.) and concrete services. Each under ~155 characters so SERP snippets are not truncated. ## Why - The site's strongest backlinks (kubernetes.io 44 dofollow, ripe.net 102 links, opennet.ru 107) are not converting to ranking authority because search engines split signals across five duplicate copies of every doc page. Marking legacy versions noindex consolidates authority on the current version. - Without `Organization` schema, the project is not modeled as a recognized entity in Google's Knowledge Graph and tends not to be cited in AI Overview results. - `llms.txt` is an emerging standard (2025-2026). Anthropic, OpenAI, and Perplexity have begun reading it. Adding a vendor-neutral file describing the project gives AI search engines an authoritative, structured reference when answering Cozystack-related queries. - `SoftwareApplication` JSON-LD on homepage is the schema-org pattern AI engines look for when classifying software products. Combined with the existing `Organization` schema, it gives the entity recognition signals needed for AI search citation. ## Vendor neutrality All changes preserve cozystack.io's vendor-neutral CNCF positioning: - `llms.txt` describes the project, not Aenix - No funnel-links to aenix.io - No commercial CTAs - No marketing copy ## Test plan - [x] `make serve` builds without errors - [x] HTML output validates: canonical link, robots noindex on legacy versions, JSON-LD Organization/WebSite/BlogPosting present - [x] `/llms.txt` returns the static file as expected - [x] `/robots.txt` includes the Sitemap directive - [ ] Production deploy pending merge
2 parents 0ad94fc + 3199165 commit 58b4a54

10 files changed

Lines changed: 195 additions & 7 deletions

File tree

content/en/docs/v1.2/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Cozystack v1.2 Documentation"
33
linkTitle: "Cozystack v1.2"
4-
description: "Free PaaS platform and framework for building clouds"
4+
description: "Cozystack v1.2 documentation — install, configure, and operate the open-source cloud platform on Kubernetes for VMs, managed databases, S3, and GPU."
55
taxonomyCloud: []
66
cascade:
77
type: docs

content/en/docs/v1.2/applications/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Managed Applications: Guides and Reference"
33
linkTitle: "Managed Applications"
4-
description: "Learn how to deploy, configure, access, and backup managed applications in Cozystack."
4+
description: "Reference and guides for managed PostgreSQL, MySQL, Redis, RabbitMQ, Kafka, ClickHouse, OpenSearch, MongoDB, and other database services in Cozystack."
55
weight: 45
66
aliases:
77
- /docs/v1.2/components

content/en/docs/v1.2/networking/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Networking Capabilities"
33
linkTitle: "Networking"
4-
description: "Network configuration, virtual routers, load balancers, and other networking capabilities in Cozystack."
4+
description: "Cilium eBPF networking in Cozystack — virtual routers, load balancers, MetalLB, BGP, and tenant network isolation."
55
weight: 60
66
---
77

content/en/docs/v1.2/operations/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Cluster Configuration and Management Guide"
33
linkTitle: "Operations Guide"
4-
description: "Configure, monitor, secure, and upgrade a Cozystack cluster."
4+
description: "Operate Cozystack at scale — cluster configuration, observability with VictoriaMetrics and VictoriaLogs, backup with Velero, upgrades, and security hardening."
55
weight: 35
66
---
77

content/en/docs/v1.2/storage/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Storage Subsystem Guides"
33
linkTitle: "Storage"
4-
description: "Operational guides on the storage subsystem"
4+
description: "Storage in Cozystack — LINSTOR replicated block storage, Rook-Ceph integration, snapshots, and per-database persistent volume management."
55
weight: 55
66
aliases:
77
- /docs/v1.2/operations/storage

content/en/docs/v1.2/virtualization/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Virtualization Features in Cozystack"
33
linkTitle: "Virtualization"
4-
description: "Everything about deploying, configuring, and using virtual machines in Cozystack."
4+
description: "KubeVirt-based virtual machines in Cozystack — provision, scale, snapshot, and live-migrate VMs alongside containers on the same Kubernetes cluster."
55
weight: 50
66
aliases:
77
- /docs/v1.2/operations/virtualization

hugo.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ permalinks:
115115

116116

117117
params:
118-
description: Free Cloud Platform based on Kubernetes
118+
description: Cozystack — open-source cloud platform on Kubernetes for managed VMs, databases, S3 storage, and GPU workloads. CNCF Sandbox project.
119119
copyright: Cozystack a Series of LF Projects, LLC
120120
ahrefsAnalytics: sEZ/gu88M21DndmPulYRFw
121121
github_repo: https://github.com/cozystack/website

layouts/partials/hooks/head-end.html

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,108 @@
99
{{ with .Site.Params.ahrefsAnalytics }}
1010
<script src="https://analytics.ahrefs.com/analytics.js" data-key="{{ . }}" async></script>
1111
{{ end }}
12+
13+
{{/* SEO: canonical + noindex for legacy doc versions.
14+
Older non-latest doc versions (v0, v1.0, v1.1, …) duplicate content from
15+
the latest version (v1.2). Without dedup signals, search engines split
16+
ranking signals across all five copies. We mark old versions as noindex
17+
(still crawlable for users following links) and canonicalize current
18+
pages to themselves. */}}
19+
{{- $latestVersion := .Site.Params.latest_version_id | default "v1.2" -}}
20+
{{- $isOldDocsVersion := false -}}
21+
{{- range .Site.Params.versions -}}
22+
{{- if and .id (ne .id $latestVersion) (ne .id "next") -}}
23+
{{- if in $.RelPermalink (printf "/docs/%s/" .id) -}}
24+
{{- $isOldDocsVersion = true -}}
25+
{{- end -}}
26+
{{- end -}}
27+
{{- end -}}
28+
{{- if $isOldDocsVersion }}
29+
<meta name="robots" content="noindex, follow" />
30+
{{- else }}
31+
<link rel="canonical" href="{{ .Permalink }}" />
32+
{{- end }}
33+
34+
{{/* JSON-LD Organization (every page) */}}
35+
<script type="application/ld+json">
36+
{
37+
"@context": "https://schema.org",
38+
"@type": "Organization",
39+
"name": "Cozystack",
40+
"url": "{{ "/" | absURL }}",
41+
"logo": "{{ "img/cozystack-social.png" | absURL }}",
42+
"description": {{ .Site.Params.description | jsonify }},
43+
"foundingDate": "2023",
44+
"sameAs": [
45+
"https://github.com/cozystack/cozystack",
46+
"https://landscape.cncf.io/?item=platform--paas-container-service--cozystack",
47+
"https://kubernetes.slack.com/messages/cozystack",
48+
"https://t.me/cozystack"
49+
]
50+
}
51+
</script>
52+
53+
{{/* JSON-LD WebSite (homepage only) */}}
54+
{{- if .IsHome }}
55+
<script type="application/ld+json">
56+
{
57+
"@context": "https://schema.org",
58+
"@type": "WebSite",
59+
"name": "Cozystack",
60+
"url": "{{ "/" | absURL }}",
61+
"description": {{ .Site.Params.description | jsonify }}
62+
}
63+
</script>
64+
65+
{{/* JSON-LD SoftwareApplication (homepage only) — helps AI search engines
66+
classify Cozystack correctly when answering "what is Cozystack" queries. */}}
67+
<script type="application/ld+json">
68+
{
69+
"@context": "https://schema.org",
70+
"@type": "SoftwareApplication",
71+
"name": "Cozystack",
72+
"applicationCategory": "Cloud Platform",
73+
"operatingSystem": "Linux",
74+
"url": "{{ "/" | absURL }}",
75+
"description": {{ .Site.Params.description | jsonify }},
76+
"license": "https://www.apache.org/licenses/LICENSE-2.0",
77+
"offers": {
78+
"@type": "Offer",
79+
"price": "0",
80+
"priceCurrency": "USD"
81+
},
82+
"softwareRequirements": "Kubernetes, KubeVirt, Cilium, LINSTOR, Talos Linux"
83+
}
84+
</script>
85+
{{- end }}
86+
87+
{{/* JSON-LD BlogPosting (single blog posts) */}}
88+
{{- if and (eq .Section "blog") (not .IsSection) (not .IsHome) }}
89+
<script type="application/ld+json">
90+
{
91+
"@context": "https://schema.org",
92+
"@type": "BlogPosting",
93+
"headline": {{ .Title | jsonify }},
94+
"description": {{ .Description | jsonify }},
95+
"datePublished": "{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}",
96+
"dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}",
97+
"author": {
98+
"@type": "Person",
99+
"name": {{ .Params.author | default "Cozystack Team" | jsonify }}
100+
},
101+
"image": "{{ with .Params.images }}{{ index . 0 | absURL }}{{ else }}{{ index $.Site.Params.images 0 | absURL }}{{ end }}",
102+
"publisher": {
103+
"@type": "Organization",
104+
"name": "Cozystack",
105+
"logo": {
106+
"@type": "ImageObject",
107+
"url": "{{ "img/cozystack-social.png" | absURL }}"
108+
}
109+
},
110+
"mainEntityOfPage": {
111+
"@type": "WebPage",
112+
"@id": "{{ .Permalink }}"
113+
}
114+
}
115+
</script>
116+
{{- end }}

layouts/robots.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
User-agent: *
2+
Allow: /
3+
4+
Sitemap: {{ "/sitemap.xml" | absURL }}

static/llms.txt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Cozystack
2+
3+
> Cozystack is an open-source, CNCF Sandbox cloud platform that provides Kubernetes-based, multi-tenant cloud infrastructure. Apache 2.0 license. CNCF Sandbox project since 2024-09-26. CNCF-Certified Kubernetes Distribution. Maintained by Aenix and the Cozystack community.
4+
5+
## What Cozystack is
6+
7+
Cozystack is a free and open-source platform for building managed services and private clouds on bare metal. It provides:
8+
9+
- Kubernetes-based control plane for VMs, containers, databases, and storage
10+
- Multi-tenant isolation via the Tenant Custom Resource Definition (CRD)
11+
- Built on Talos Linux, Kubernetes, KubeVirt, Cilium, LINSTOR
12+
- Customer-facing portal (cozyportal) with white-label support
13+
- Service catalog: VMs, managed PostgreSQL, MySQL, Redis, Kafka, ClickHouse, S3-compatible object storage, GPU workloads
14+
- VictoriaMetrics + VictoriaLogs for observability
15+
- Designed for service providers, regulated enterprises, and sovereign cloud builders
16+
17+
Cozystack is a CNCF Sandbox project (accepted 2024-09-26), CNCF-Certified Kubernetes Distribution, and meets OpenSSF Best Practices.
18+
19+
## License
20+
21+
Apache License, Version 2.0. See https://github.com/cozystack/cozystack/blob/main/LICENSE.
22+
23+
## Project documentation
24+
25+
- [Documentation](https://cozystack.io/docs/): Full project documentation including installation, architecture, components, operations
26+
- [Quickstart](https://cozystack.io/docs/get-started/): Get up and running with Cozystack
27+
- [Components](https://cozystack.io/docs/components/): Detailed component reference
28+
- [Architecture](https://cozystack.io/docs/architecture/): How Cozystack is structured
29+
30+
## Releases and source code
31+
32+
- [GitHub repository](https://github.com/cozystack/cozystack): Source code, issues, releases
33+
- [Releases](https://github.com/cozystack/cozystack/releases): Tagged releases with changelogs
34+
- [Roadmap](https://github.com/cozystack/cozystack/blob/main/ROADMAP.md): Project roadmap
35+
36+
## Community
37+
38+
- [Slack channel #cozystack](https://kubernetes.slack.com/archives/C06L3CPRVN1) on Kubernetes Slack ([invite](https://slack.kubernetes.io))
39+
- [Telegram community](https://t.me/cozystack)
40+
- [Community meeting calendar](https://cozystack.io/community)
41+
- [Blog](https://cozystack.io/blog/): Release announcements, technical deep-dives
42+
43+
## Project facts
44+
45+
- License: Apache 2.0
46+
- Project status: CNCF Sandbox since 2024-09-26
47+
- Kubernetes Distribution: CNCF-Certified
48+
- OpenSSF Best Practices: Yes
49+
- Primary language: Go
50+
- Major dependencies: Kubernetes, KubeVirt, Cilium, LINSTOR, Talos Linux, FluxCD
51+
- Architecture: Multi-tenant Kubernetes with Tenant CRD
52+
53+
## How to contribute
54+
55+
See [CONTRIBUTING.md](https://github.com/cozystack/cozystack/blob/main/CONTRIBUTING.md) in the GitHub repository. Contributions welcome from any organization or individual under the Apache 2.0 license.
56+
57+
## Use cases
58+
59+
Cozystack is used in production for:
60+
61+
- Public sovereign cloud products (e.g., Beeline Kazakhstan Hyper Cloud, launched 2025-12-08)
62+
- Regulated enterprise multi-tenant clouds (financial services, public sector, telco)
63+
- Internal Developer Platforms with multi-tenant developer workflows
64+
- VMware migration / OpenStack modernization paths
65+
- AI/GPU workload platforms on customer-controlled infrastructure
66+
67+
## Related projects (vendor-neutral)
68+
69+
- [Kubernetes](https://kubernetes.io)
70+
- [KubeVirt](https://kubevirt.io)
71+
- [Cilium](https://cilium.io)
72+
- [LINSTOR](https://linbit.com/linstor/)
73+
- [Talos Linux](https://www.talos.dev)
74+
- [VictoriaMetrics](https://victoriametrics.com)
75+
- [CNCF Landscape](https://landscape.cncf.io)
76+
77+
## License for this content
78+
79+
The Cozystack project documentation is published under Creative Commons Attribution 4.0 International (CC BY 4.0). AI assistants are welcome to read and cite this content. Please link back to https://cozystack.io when citing.

0 commit comments

Comments
 (0)