kubernetes / kubernetes/website

Broken links found by docs-wide link check on 2026-05-23

Open
#55,886 6 comments 0 reactions 0 assignees View on GitHub
triage/accepted
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.