Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/_index.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/applications/_index.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/networking/_index.md
Original file line number Diff line number Diff line change
@@ -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
---

Expand Down
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/operations/_index.md
Original file line number Diff line number Diff line change
@@ -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
---

Expand Down
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/storage/_index.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion content/en/docs/v1.2/virtualization/_index.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion hugo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
84 changes: 84 additions & 0 deletions layouts/partials/hooks/head-end.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,87 @@
{{ with .Site.Params.ahrefsAnalytics }}
<script src="https://analytics.ahrefs.com/analytics.js" data-key="{{ . }}" async></script>
{{ 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 }}
<meta name="robots" content="noindex, follow" />
Comment on lines +19 to +29
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

There is a discrepancy between the SEO logic and the site configuration. The hugo.yaml file (line 133) defines latest_version_id as v1.3, but this PR applies SEO improvements to the v1.2 documentation. Under the current logic in lines 21-27, all v1.2 pages will be marked with noindex (line 29), which negates the value of the new meta descriptions and JSON-LD for those pages. If v1.2 is intended to be the primary version for search engines, latest_version_id in hugo.yaml should be updated to v1.2.

{{- else }}
<link rel="canonical" href="{{ .Permalink }}" />
{{- end }}

{{/* JSON-LD Organization (every page) */}}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Cozystack",
"url": "{{ "/" | absURL }}",
"logo": "{{ "img/cozystack-social.png" | absURL }}",
"description": {{ .Site.Params.description | jsonify }},
"foundingDate": "2023",
"sameAs": [
"https://github.com/cozystack/cozystack",
"https://landscape.cncf.io/?item=platform--paas-container-service--cozystack",
"https://kubernetes.slack.com/messages/cozystack",
"https://t.me/cozystack"
]
}
</script>

{{/* JSON-LD WebSite (homepage only) */}}
{{- if .IsHome }}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Cozystack",
"url": "{{ "/" | absURL }}",
"description": {{ .Site.Params.description | jsonify }}
}
</script>
{{- end }}

{{/* JSON-LD BlogPosting (single blog posts) */}}
{{- if and (eq .Section "blog") (not .IsSection) (not .IsHome) }}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": {{ .Title | jsonify }},
"description": {{ .Description | jsonify }},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If a blog post is missing the description field in its frontmatter, the BlogPosting JSON-LD will have an empty description field. Using .Summary as a fallback ensures a valid description is always provided for search engines.

Suggested change
"description": {{ .Description | jsonify }},
"description": {{ .Description | default .Summary | jsonify }},

"datePublished": "{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}",
"dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}",
"author": {
"@type": "Person",
"name": {{ .Params.author | default "Cozystack Team" | jsonify }}
},
"image": "{{ with .Params.images }}{{ index . 0 | absURL }}{{ else }}{{ index $.Site.Params.images 0 | absURL }}{{ end }}",
"publisher": {
"@type": "Organization",
"name": "Cozystack",
"logo": {
"@type": "ImageObject",
"url": "{{ "img/cozystack-social.png" | absURL }}"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{ .Permalink }}"
}
}
</script>
{{- end }}
4 changes: 4 additions & 0 deletions layouts/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
User-agent: *
Allow: /

Sitemap: {{ "/sitemap.xml" | absURL }}