Skip to content

docs: permanent redirects and unique page titles - #189

Merged
majinghe merged 1 commit into
mainfrom
cursor/seo-redirects-titles-99ed
Oct 27, 2026
Merged

majinghe merged 1 commit into
mainfrom
cursor/seo-redirects-titles-99ed

Conversation

@majinghe

Copy link
Copy Markdown
Collaborator

Summary

Permanent redirects for historical docs URLs that 404 today, plus the confirmed title, table, anchor, and template fixes. Sidebar labels stay short via meta.json; the document <title> is the longer frontmatter title.

/ → /en is unchanged. Accept-Language handling in public/language-redirect.js is unchanged. Rules that only point at the English homepage (for example /concepts/architecture → /en) are not copied onto other locales. Splat rules such as /management/* stay English-only so they cannot guess a wrong prefix.

Redirects (301)

Base rules live in public/_redirects. worker.mjs reuses each exact rule for en, zh, de, fr, and ja by swapping the /en prefix. Trailing slashes are stripped before matching, so /de/features/s3-compatibility/ and /de/features/s3-compatibility are the same hop.

Historical paths

From To
/installation/docker, /installation/docker/index (and .html) /installation/container/docker
/upgrade-scale/upgrade /operations/upgrade (rule already existed; now applies in every locale)
/features/s3-compatibility /reference/s3-compatibility
/management/bucket, /management/bucket/index /administration/data/bucket/creation
/developer/api /administration/protocols/s3

There is no bucket index page. Creation is the first page in the Bucket section, so the old bucket index goes there instead of the homepage.

/developer/api goes to the S3 API page linked from the Developer landing page.

big-data moves (#168)

These pages moved out of developer/integration/big-data/ and the old URLs 404 in all five locales:

Old slug New section
clickhouse, doris, duckdb, influxdb, milvus, trino, vitess database/
lakefs, opendal, zerofs storage/
mlflow ai/

Pages that are still under big-data/ (Kafka, Spark, and the rest) are not redirected.

Pretty URLs that were 307

The worker now emits 301 for permanent canonicalization before Cloudflare’s asset handler can answer 307:

  • drop a trailing slash (/ja/ → /ja)
  • drop a nested .html (/fr/installation/linux/quick-start.html → /fr/installation/linux/quick-start)
  • drop /index and /index.html (/ja/installation/linux/index → /ja/installation/linux)

Root files such as /baidu_verify_*.html are left alone. / and /index.html stay 301 to /en.

Other fixes

  • Titles. Exact duplicate <title>s in each locale are now task-specific: installation chooser vs Helm install vs Operator install, Helm vs Operator overviews, Docker, rclone examples vs integration, Terraform examples vs integration, the two observability pages, the two pool-expansion pages, and the Japanese container install vs container upgrade titles. Short sidebar labels are preserved in meta.json.
  • French S3 matrix. The List/Cases/Role separator used a narrow no-break space (U+202F) before :, so the table was dumped as a paragraph. The separator is ASCII ---: again. The built page has 5 <table> elements, including <th>Liste</th><th>Cas</th><th>Rôle</th>.
  • Anchors. Headings that are linked with stable English fragments now declare [#…] in every locale (deployment comparison, storage/erasure, event/audit targets, CORS, Docker bind-mount, policy format, policy evaluation, KMS verification, known S3 differences, quick-start next steps). French and German links that still used translated fragments now point at those ids.
  • Meta description. FumaPress already emits <meta name="description">. The extra copy in press.config.tsx is removed. Built homepages and the Docker page each have one description tag. Pages with no description still get the site-wide fallback.
  • Shared UI. German, French, and Japanese now translate the existing Fumadocs keys for Search, On this page, and Copy Markdown (including the copied state and the search button’s accessible name). Chinese already comes from the zhCN preset.

Verification

npm run build succeeded (267 Cloudflare rules). npm run docs:check passed. npm run test:worker: 20 passed, including the built dist/public/_redirects.

Local equivalent of curl -sI against the worker and the built rules (status 301, one hop, query string kept):

Request Location
/de/installation/docker/index /de/installation/container/docker
/de/installation/docker/index.html /de/installation/container/docker
/zh/installation/docker /zh/installation/container/docker
/de/upgrade-scale/upgrade/ /de/operations/upgrade
/de/features/s3-compatibility/ /de/reference/s3-compatibility
/de/management/bucket/index /de/administration/data/bucket/creation
/ja/developer/api /ja/administration/protocols/s3
/en/developer/integration/big-data/duckdb /en/developer/integration/database/duckdb
/zh/developer/integration/big-data/trino/ /zh/developer/integration/database/trino
/de/developer/integration/big-data/lakefs /de/developer/integration/storage/lakefs
/en/developer/integration/big-data/mlflow /en/developer/integration/ai/mlflow
/ja/ /ja
/ja/installation/linux/index /ja/installation/linux
/fr/installation/linux/quick-start.html /fr/installation/linux/quick-start

Each target above exists as a built index.html (HTTP 200 when the static file is served). /de/reference/s3-compatibility and /de/developer/integration/database/duckdb are not redirected again. /de/concepts/architecture is not sent to the German homepage. /en/concepts/architecture still 301s to /en.

Built HTML checks: Docker <title> is Install and configure RustFS with Docker / RustFS mit Docker installieren und konfigurieren; Helm and Operator overviews no longer share 概要; /de/installation has id="deployment-mode-comparison"; the German Docker page renders “Suche”, “Auf dieser Seite”, and “Markdown kopieren”.

Open in Web Open in Cursor 

Send moved historical and big-data URLs to their current pages with 301s in every locale, and give colliding page titles task-specific names. Also repair the French S3 matrix table, stable heading anchors, duplicate meta descriptions, and the shared search/TOC/copy labels.

Co-authored-by: hector <majinghe@users.noreply.github.com>
@vercel

vercel Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs-rustfs-com Ready Ready Preview Oct 27, 2026 1:47am UTC

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
rustfs-docs 3b32444 Commit Preview URL

Branch Preview URL
Oct 27 2026, 01:39 AM

@majinghe
majinghe merged commit 0a97a0b into main Oct 27, 2026
5 checks passed
@majinghe
majinghe deleted the cursor/seo-redirects-titles-99ed branch October 27, 2026 01:50

This branch was successfully deployed

1 active deployment
Preview — 3b32444f Deployed Oct 27, 2026 by vercel[bot]
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.

2 participants