Skip to content

Fix 404s for old cover URLs, cut-off links and small tag pages - #2095

Merged
bobbyonmagic merged 1 commit into
mainfrom
fix/real-404s
Nov 5, 2026
Merged

bobbyonmagic merged 1 commit into
mainfrom
fix/real-404s

Conversation

@bobbyonmagic

Copy link
Copy Markdown
Collaborator

Adds 301s for the 404s in the Cloudflare logs that have one clear target, and lets the 404 page recover cut-off links.

  • 349 old SVG cover URLs that still get requests now go to the JPEG that replaced them, plus 16 replaced share images and covers of guides that became posts.
  • 11 cut-off or mistyped links go to the page they meant. For other /posts, /guides, /games and /comparisons paths, the 404 page strips a trailing "...", "…" or "-", reads /search-index.json, and sends the reader to the one page whose slug starts with the rest (12 characters or more), or lists up to 5 matches. The response stays a 404.
  • 171 tags below the tag page threshold go to the closest built tag or category, including branches, commits and s3, which dropped below it with Merge 25 dead short posts into stronger pages, with 301s (batch 1) #2094. Tags without a clear match stay 404.
  • A test now fails when a redirect points at a path that another rule redirects.

The /posts/null, /games/null and other .../null requests all come from the meta-webindexer crawler, each followed by a Cloudflare Early Hints cache request. No site code builds these URLs, so they stay 404.

public/_redirects after this change: 1,643 static and 9 dynamic rules.

Tags mapped:

  • /tags/git: author, branch, branches, cherry-pick, clone, commit-history, commit-messages, commits, conflicts, gitignore, merge, pre-commit, remote, remote-branches, remote-repository, repository-management, stash, submodules
  • /tags/security: ai-security, application-security, authentication, cryptography, dynamic-secrets, encryption, hashicorp-vault, oauth2, penetration-testing, privilege-escalation, rce, seccomp, secrets, secrets-detection, secrets-management, sso, vault, web-security
  • /tags/kubernetes: aks, cilium, clustermesh, configmap, container-orchestration, cronjobs, dra, gateway-api, helm, ingress, istio, kustomize, minikube, nodes, pod-security, services, statefulsets
  • /tags/networking: ftp, icmp, ip, ip-address, iptables, network-diagnostics, network-scanning, ping, port-forwarding, port-mapping, protocols, udp, wireshark
  • /tags/linux: du, find, kernel, kill, ls, pkill, process-management, sudo, unix, wc
  • /categories/cloud: azure, cloud-computing, cloud-migration, gcp, google-cloud, heroku, hetzner, multi-cloud, paas
  • /tags/cicd: canary-deployment, canary-releases, continuous-integration, deployment-strategies, feature-flags, pipeline, progressive-delivery
  • /tags/finops: budgets, cloud-cost, cloud-cost-management, cloud-costs, cost-management, pricing
  • /tags/databases: database, database-migrations, managed-database, mysql, sql
  • /tags/aws: aws-sdk, ecs, fargate, route53
  • /tags/bash: arrays, shell-aliases, strings, wildcards
  • /tags/docker: alpine, buildkit, docker-exec, docker-networking
  • /tags/sre: alert-fatigue, error-budgets, escalation, slos
  • /tags/ai: aiops, claude-code, inference
  • /tags/devsecops: pipeline-security, quality-gates, semgrep
  • /tags/monitoring: application-monitoring, metrics, prometheus
  • /tags/observability: distributed-tracing, jaeger, splunk
  • /tags/shell-scripting: interactive-scripts, unix-timestamp, user-input
  • /tags/supply-chain: artifact-signing, sbom, shai-hulud
  • /tags/terraform: for_each, modules, providers
  • /tags/email: deliverability, smtp
  • /tags/gitops: argo-cd, argocd
  • /tags/platform-engineering: idp, self-service
  • /tags/python: asyncio, pypi
  • /tags/vulnerability: vulnerabilities, vulnerability-management
  • /tags/architecture: cloud-architecture
  • /tags/cloud-native: cncf
  • /tags/cost-optimization: cloud-economics
  • /tags/digitalocean: app-platform
  • /tags/file-management: file-operations
  • /tags/file-system: symlinks
  • /tags/github: fork
  • /tags/go: golang
  • /tags/grep: recursive-search
  • /tags/iam: policies
  • /tags/infrastructure-as-code: cloudformation
  • /tags/logging: logs
  • /tags/object-storage: s3
  • /tags/performance: tuning
  • /tags/permissions: chmod
  • /tags/pods: crashloopbackoff
  • /tags/reliability: high-availability
  • /tags/scalability: autoscaling
  • /tags/system-administration: sysadmin
  • /tags/tutorials: tutorial
  • /tags/volumes: persistence

Redirect old SVG covers and replaced share images to their JPEG files,
cut-off links to the page they meant, and tags below the tag page
threshold to the closest built tag or category. The 404 page now
finds the page a cut-off link meant from the search index.
@bobbyonmagic
bobbyonmagic merged commit 39040b0 into main Nov 5, 2026
2 checks passed
@bobbyonmagic
bobbyonmagic deleted the fix/real-404s branch November 5, 2026 16:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant