kubernetes / kubernetes/website
Broken links found by docs-wide link check on 2026-05-23
- Dominant language
- HTML
- Stars
- 5.4k
- Forks
- 15.7k
- Avg merge
- 4d 18h
- Merged PRs (30d)
- 204
Description
### What happened?
I ran an automated link check against all documentation URLs listed in the public Kubernetes sitemap on 2026-05-23. The crawl found multiple documentation links that currently return HTTP 404.
### Crawl summary
- Documentation pages crawled: 4236
- Unique links checked: 24694
- Confirmed HTTP 404 links: 951
- Page fetch failures while crawling docs pages: 1
- Runtime: 1543.0 seconds
### Top 404 domains
- `kubernetes.io`: 818
- `git.k8s.io`: 32
- `github.com`: 14
- `www.rfc-editor.org`: 12
- `releases.k8s.io`: 6
- `examples.k8s.io`: 5
- `docs.projectcalico.org`: 4
- `docs.cilium.io`: 3
- `gateway-api.sigs.k8s.io`: 3
- `v1-32.docs.kubernetes.io`: 3
- `www.weave.works`: 3
- `v1-33.docs.kubernetes.io`: 2
### Kubernetes.io 404s by locale/path bucket
- `bn`: 168
- `en/root`: 156
- `fa`: 52
- `fr`: 51
- `zh-cn`: 48
- `id`: 39
- `ja`: 39
- `pt-br`: 35
- `ru`: 34
- `pl`: 32
- `vi`: 31
- `hi`: 24
- `ko`: 23
- `uk`: 23
- `es`: 22
- `de`: 20
- `it`: 18
- `en`: 3
### Representative broken internal links
- `bn`: `https://kubernetes.io/bn/docs/concepts/architecture/cloud-controller/` from `https://kubernetes.io/bn/docs/reference/glossary/`
- `en/root`: `https://kubernetes.io/content/en/docs/tasks/configure-pod-container/security-context/` from `https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/`
- `de`: `https://kubernetes.io/de/docs/concepts/architecture/cri` from `https://kubernetes.io/de/docs/concepts/workloads/pods/pod-lifecycle/`
- `en`: `https://kubernetes.io/en/docs/tasks/tools/install-kubectl-linux` from `https://kubernetes.io/id/docs/setup/learning-environment/`
- `es`: `https://kubernetes.io/es/docs/admin/kubeadm/` from `https://kubernetes.io/es/docs/reference/glossary/`
- `fa`: `https://kubernetes.io/fa/docs/concepts/containers/` from `https://kubernetes.io/fa/docs/reference/glossary/`
- `fr`: `https://kubernetes.io/fr/docs/admin/kube-controller-manager/` from `https://kubernetes.io/fr/docs/concepts/architecture/`
- `hi`: `https://kubernetes.io/hi/docs/admin/kubeadm/` from `https://kubernetes.io/hi/docs/setup/learning-environment/`
- `id`: `https://kubernetes.io/id/docs/admin/node` from `https://kubernetes.io/id/docs/tasks/run-application/force-delete-stateful-set-pod/`
- `it`: `https://kubernetes.io/it/docs/concepts/extend-kubernetes/operator/` from `https://kubernetes.io/it/docs/concepts/configuration/configmap/`
- `ja`: `https://kubernetes.io/ja/docs/concepts/cluster-administration/cluster-autoscaling` from `https://kubernetes.io/ja/docs/setup/production-environment/`
- `ko`: `https://kubernetes.io/ko/docs/concepts/architecture/cri` from `https://kubernetes.io/ko/docs/concepts/architecture/cgroups/`
### Representative broken external links
- `http://json-schema.org/)` from `https://kubernetes.io/docs/reference/kubernetes-api/apiextensions/custom-resource-definition-v1/`
- `http://releases.k8s.io/main/cluster/addons/README.md` from `https://kubernetes.io/id/docs/tasks/administer-cluster/dns-custom-nameservers/`
- `http://docs.ansible.com/ansible/playbooks_variables.html` from `https://kubernetes.io/fr/docs/setup/custom-cloud/kubespray/`
- `http://releases.k8s.io/main/cluster/addons/dns/coredns` from `https://kubernetes.io/id/docs/concepts/services-networking/connect-applications-service/`
- `http://releases.k8s.io/main/cluster/addons/dns/` from `https://kubernetes.io/id/docs/concepts/containers/container-environment/`
- `http://releases.k8s.io/main/cluster/addons/cluster-monitoring/README.md` from `https://kubernetes.io/id/docs/concepts/configuration/manage-compute-resources-container/`
- `http://releases.k8s.io/main/pkg/kubelet/envvars/envvars.go` from `https://kubernetes.io/id/docs/concepts/services-networking/service/`
- `http://releases.k8s.io/main/cluster/addons/dns/kube-dns/README.md` from `https://kubernetes.io/id/docs/concepts/services-networking/connect-applications-service/`
- `http://ceph.com/docs/master/rbd/rbd/` from `https://kubernetes.io/fr/docs/concepts/storage/volumes/`
- `https://appscode.com/products/pharmer/` from `https://kubernetes.io/de/docs/setup/`
- `https://buehler.github.io/dotnet-operator-sdk/` from `https://kubernetes.io/ru/docs/concepts/extend-kubernetes/operator/`
- `https://brew.sh/)` from `https://kubernetes.io/fr/docs/setup/custom-cloud/kops/`
- `https://bsky.app/profile/kubernetes.io` from `https://kubernetes.io/bn/docs/concepts/`
- `https://containo.us/services` from `https://kubernetes.io/id/docs/concepts/services-networking/ingress-controllers/`
- `https://coredns.io/plugins/prometheus/` from `https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/dns-custom-nameservers/`
- `https://discuss.konghq.com/c/kubernetes` from `https://kubernetes.io/id/docs/concepts/services-networking/ingress-controllers/`
- `https://azure.microsoft.com` from `https://kubernetes.io/de/docs/setup/`
- `https://docs.brew.sh/Homebrew-on-Linux)` from `https://kubernetes.io/fr/docs/setup/custom-cloud/kops/`
- `https://docs.cilium.io/en/stable/gettingstarted/kubeproxy-free` from `https://kubernetes.io/id/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/`
- `https://docs.cilium.io/en/stable/kubernetes/` from `https://kubernetes.io/fr/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/`
### Notes
- I used the root sitemap index (`https://kubernetes.io/sitemap.xml`) and included all localized docs paths containing `/docs/`.
- Links were deduplicated before status checking. Fragments were stripped before HTTP checks; query strings were preserved.
- Each URL was checked with `HEAD` first and retried with `GET` for HEAD-hostile responses/errors.
- Some entries appear to be malformed Markdown links, for example URLs ending in `)` or paths with duplicated locale segments. Those are included because the published HTML exposes them as links that return 404.
- Full JSON report with URL, status, final URL, error, and up to five source pages per broken link: https://gist.github.com/fyhao/d30c631907bfe2c3e15be275da1ef139
Contributor guide
Research direction
Start with the linked full JSON report, which lists each broken URL, status, and up to five source pages, then inspect the corresponding documentation content in the website repository. Check the sitemap-based crawl details and representative localized and external links before selecting a manageable group. Done means the selected broken links are corrected or otherwise resolved and the link check confirms the changes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- html, markdown
- Domain
- documentation
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100