# 这个站点已经在构建期为每一个路由生成了自己的 index.html（工具页 / 分类页 / 教程页 /
# 信任页），不再需要 SPA 兜底。
#
# 之前这里写的是 `/*  /index.html  200`，作用是「任何路径都返回首页 HTML」。
# 后果是随便敲一个不存在的地址也返回 200 + 首页内容，也就是软 404：
# Google 会收录一大批内容完全一样的 URL，是典型的低质量信号。
# 现在改由 dist/404.html 兜底（Cloudflare Pages 只要有顶层 404.html 就会关掉 SPA 回退），
# 未知路径返回真正的 404。

# /index.html 是首页的重复入口，统一收敛到 /
/index.html       /              301

# ============================================================================
# 整类下线的分类页 301（2026-10-05 补）
#
# 背景：下面这几个分类在瘦身后已经没有工具、不再生成页面，但旧版 sitemap 收录过它们，
# Google 里还有排名。不加规则的话部署后这些 URL 会从 200 直接变成 404，白丢权重。
# 目标选最相关的存活分类；确实没有对应分类的退回首页。
# ============================================================================

/category/toml            /category/data/          301
/category/toml/           /category/data/          301
/category/maths           /                        301
/category/maths/          /                        301
/category/default         /                        301
/category/default/        /                        301
/category/physics         /category/measurement/   301
/category/physics/        /category/measurement/   301
/category/cheatsheets     /category/development/   301
/category/cheatsheets/    /category/development/   301
/category/docker          /                        301
/category/docker/         /                        301
# 2026-10-06 第二批下线：游戏工具 / 数字取证 / 天气查询 三个分类的工具已全部删除
/category/gaming          /                        301
/category/gaming/         /                        301
/category/forensic        /                        301
/category/forensic/       /                        301
/category/weather         /                        301
/category/weather/        /                        301

# sitemap 的规范地址是 Astro 产出的 sitemap-index.xml（不是 sitemap.xml），
# 裸路径给个 301 方便手工输入
/sitemap          /sitemap-index.xml  301
/sitemap/         /sitemap-index.xml  301

# robots.txt 同理
/robots           /robots.txt    301
# ============================================================================
# 下线工具的 301 重定向（838 条）
# 生成时间：2026-10-06
# 生成脚本：gen-redirects.mjs（数据源 removed-tools.json + src/seo/tools-meta.json）
#
# 规则：已删工具 301 到它原来所属分类的列表页；分类整个下线的（Docker / Physics /
# Cheatsheets / TOML / Maths / Default）301 到首页 /。
# 每条同时覆盖带尾斜杠和不带尾斜杠两种写法，因为站点 URL 规范是 /<slug>/。
# ============================================================================
/acceleration-converter / 301
/acceleration-converter/ / 301
/ad-ldap-searcher / 301
/ad-ldap-searcher/ / 301
/age-crypto /category/crypto/ 301
/age-crypto/ /category/crypto/ 301
/ai-prompt-splitter /category/text/ 301
/ai-prompt-splitter/ /category/text/ 301
/amortization-calculator /category/finance/ 301
/amortization-calculator/ /category/finance/ 301
/angle-converter / 301
/angle-converter/ / 301
/ansi-escape-tester /category/development/ 301
/ansi-escape-tester/ /category/development/ 301
/ansible-vault-crypt-decrypt /category/crypto/ 301
/ansible-vault-crypt-decrypt/ /category/crypto/ 301
/area-converter / 301
/area-converter/ / 301
/argon2-hash /category/crypto/ 301
/argon2-hash/ /category/crypto/ 301
/arpa-decoder /category/network/ 301
/arpa-decoder/ /category/network/ 301
/ascii-text-drawer /category/text/ 301
/ascii-text-drawer/ /category/text/ 301
/aspect-ratio-calculator /category/measurement/ 301
/aspect-ratio-calculator/ /category/measurement/ 301
/base64-hex-converter /category/converters/ 301
/base64-hex-converter/ /category/converters/ 301
/bash-memo / 301
/bash-memo/ / 301
/basic-auth-generator /category/network/ 301
/basic-auth-generator/ /category/network/ 301
/bech32 /category/crypto/ 301
/bech32/ /category/crypto/ 301
/benchmark-builder /category/measurement/ 301
/benchmark-builder/ /category/measurement/ 301
/bimi-dns-generator /category/network/ 301
/bimi-dns-generator/ /category/network/ 301
/binary-calculator / 301
/binary-calculator/ / 301
/bip39-generator /category/generators/ 301
/bip39-generator/ /category/generators/ 301
/bounce-parser / 301
/bounce-parser/ / 301
/camera-recorder /category/images/ 301
/camera-recorder/ /category/images/ 301
/card-picker / 301
/card-picker/ / 301
/certificate-key-parser /category/crypto/ 301
/certificate-key-parser/ /category/crypto/ 301
/charset-detector / 301
/charset-detector/ / 301
/chmod-calculator /category/network/ 301
/chmod-calculator/ /category/network/ 301
/chmod-memo / 301
/chmod-memo/ / 301
/chronometer /category/datetime/ 301
/chronometer/ /category/datetime/ 301
/cidr-in-cidr /category/network/ 301
/cidr-in-cidr/ /category/network/ 301
/ip-in-range /category/network/ 301
/ip-in-range/ /category/network/ 301
/citation-generator /category/text/ 301
/citation-generator/ /category/text/ 301
/cli-command-editor /category/development/ 301
/cli-command-editor/ /category/development/ 301
/code-highlighter /category/development/ 301
/code-highlighter/ /category/development/ 301
/coin-flipper / 301
/coin-flipper/ / 301
/color-contrast-checker /category/web/ 301
/color-contrast-checker/ /category/web/ 301
/color-wheel /category/web/ 301
/color-wheel/ /category/web/ 301
/common-regex-memo / 301
/common-regex-memo/ / 301
/cookies-parser / 301
/cookies-parser/ / 301
/crc-calculator /category/crypto/ 301
/crc-calculator/ /category/crypto/ 301
/credit-card-checker /category/data/ 301
/credit-card-checker/ /category/data/ 301
/cron-alarm /category/datetime/ 301
/cron-alarm/ /category/datetime/ 301
/cron-expression-builder / 301
/cron-expression-builder/ / 301
/crop-image /category/images/ 301
/crop-image/ /category/images/ 301
/csr-generator /category/crypto/ 301
/csr-generator/ /category/crypto/ 301
/css-gradient-generator /category/web/ 301
/css-gradient-generator/ /category/web/ 301
/css-prettifier /category/web/ 301
/css-prettifier/ /category/web/ 301
/css-selectors-memo / 301
/css-selectors-memo/ / 301
/css-units-converter /category/web/ 301
/css-units-converter/ /category/web/ 301
/css-xpath-converter /category/web/ 301
/css-xpath-converter/ /category/web/ 301
/csv-to-data /category/converters/ 301
/csv-to-data/ /category/converters/ 301
/curl-converter /category/development/ 301
/curl-converter/ /category/development/ 301
/curl-generator /category/network/ 301
/curl-generator/ /category/network/ 301
/data-faker /category/development/ 301
/data-faker/ /category/development/ 301
/data-transfer-rate-converter /category/network/ 301
/data-transfer-rate-converter/ /category/network/ 301
/database-builder /category/development/ 301
/database-builder/ /category/development/ 301
/database-connection-string-builder /category/development/ 301
/database-connection-string-builder/ /category/development/ 301
/database-table-generator /category/development/ 301
/database-table-generator/ /category/development/ 301
/dbm-mw-converter /category/converters/ 301
/dbm-mw-converter/ /category/converters/ 301
/dead-pixel / 301
/dead-pixel/ / 301
/device-information /category/web/ 301
/device-information/ /category/web/ 301
/dice-roller / 301
/dice-roller/ / 301
/diceware-generator /category/generators/ 301
/diceware-generator/ /category/generators/ 301
/distinct-words /category/text/ 301
/distinct-words/ /category/text/ 301
/django-secret-generator /category/development/ 301
/django-secret-generator/ /category/development/ 301
/dkim-dns-generator /category/network/ 301
/dkim-dns-generator/ /category/network/ 301
/dmarc-dns-generator /category/network/ 301
/dmarc-dns-generator/ /category/network/ 301
/dmarc-report-analyzer / 301
/dmarc-report-analyzer/ / 301
/dns-propagation-tester / 301
/dns-propagation-tester/ / 301
/dns-queries /category/network/ 301
/dns-queries/ /category/network/ 301
/dns-tester / 301
/dns-tester/ / 301
/dnsbl-checker /category/network/ 301
/dnsbl-checker/ /category/network/ 301
/docker-compose-converter / 301
/docker-compose-converter/ / 301
/docker-compose-memo / 301
/docker-compose-memo/ / 301
/docker-compose-to-docker-run-converter / 301
/docker-compose-to-docker-run-converter/ / 301
/docker-compose-to-env-file / 301
/docker-compose-to-env-file/ / 301
/docker-compose-to-kubernetes / 301
/docker-compose-to-kubernetes/ / 301
/docker-compose-to-quadlets / 301
/docker-compose-to-quadlets/ / 301
/docker-compose-validator / 301
/docker-compose-validator/ / 301
/docker-image-downloader / 301
/docker-image-downloader/ / 301
/docker-inspect-to-docker-run / 301
/docker-inspect-to-docker-run/ / 301
/docker-memo / 301
/docker-memo/ / 301
/docker-pangolin-labels / 301
/docker-pangolin-labels/ / 301
/docker-run-to-docker-compose-converter / 301
/docker-run-to-docker-compose-converter/ / 301
/docker-run-to-kubernetes / 301
/docker-run-to-kubernetes/ / 301
/docker-run-to-quadlets / 301
/docker-run-to-quadlets/ / 301
/docker-swarm-memo / 301
/docker-swarm-memo/ / 301
/dockerfile-label-generator / 301
/dockerfile-label-generator/ / 301
/dockerfile-memo / 301
/dockerfile-memo/ / 301
/duplicate-line-finder /category/text/ 301
/duplicate-line-finder/ /category/text/ 301
/duration-calculator /category/datetime/ 301
/duration-calculator/ /category/datetime/ 301
/ecdsa-key-pair-generator /category/crypto/ 301
/ecdsa-key-pair-generator/ /category/crypto/ 301
/ed25519-key-pair-generator /category/crypto/ 301
/ed25519-key-pair-generator/ /category/crypto/ 301
/email-normalizer /category/converters/ 301
/email-normalizer/ /category/converters/ 301
/email-parser / 301
/email-parser/ / 301
/emoji-picker /category/text/ 301
/emoji-picker/ /category/text/ 301
/emv-tlv-decoder / 301
/emv-tlv-decoder/ / 301
/energy-computer /category/converters/ 301
/energy-computer/ /category/converters/ 301
/energy-converter / 301
/energy-converter/ / 301
/env-variables-converter /category/converters/ 301
/env-variables-converter/ /category/converters/ 301
/epc-qrcode-generator /category/barcodes/ 301
/epc-qrcode-generator/ /category/barcodes/ 301
/epub-to-markdown /category/markdown/ 301
/epub-to-markdown/ /category/markdown/ 301
/eta-calculator /category/datetime/ 301
/eta-calculator/ /category/datetime/ 301
/eth-transaction-decoder / 301
/eth-transaction-decoder/ / 301
/excel-to-data /category/converters/ 301
/excel-to-data/ /category/converters/ 301
/explainshell /category/data/ 301
/explainshell/ /category/data/ 301
/extract-text-from-html /category/text/ 301
/extract-text-from-html/ /category/text/ 301
/favicon-generator /category/development/ 301
/favicon-generator/ /category/development/ 301
/favicon-grabber /category/web/ 301
/favicon-grabber/ /category/web/ 301
/file-hasher /category/crypto/ 301
/file-hasher/ /category/crypto/ 301
/file-splitter /category/development/ 301
/file-splitter/ /category/development/ 301
/file-type / 301
/file-type/ / 301
/firewalld-generator /category/network/ 301
/firewalld-generator/ /category/network/ 301
/fitness-computer / 301
/fitness-computer/ / 301
/floating-point-converter / 301
/floating-point-converter/ / 301
/folder-structure-diagram /category/text/ 301
/folder-structure-diagram/ /category/text/ 301
/font-compare /category/text/ 301
/font-compare/ /category/text/ 301
/food-energy-converter / 301
/food-energy-converter/ / 301
/force-converter / 301
/force-converter/ / 301
/frequency-converter / 301
/frequency-converter/ / 301
/fstab-generator /category/network/ 301
/fstab-generator/ /category/network/ 301
/geo-coordinates-converter /category/converters/ 301
/geo-coordinates-converter/ /category/converters/ 301
/geo-distance-calculator /category/measurement/ 301
/geo-distance-calculator/ /category/measurement/ 301
/gif-to-mp4 /category/images/ 301
/gif-to-mp4/ /category/images/ 301
/git-memo / 301
/git-memo/ / 301
/git-semantic-commit-memo / 301
/git-semantic-commit-memo/ / 301
/gitattributes-generator /category/development/ 301
/gitattributes-generator/ /category/development/ 301
/gitignore-generator /category/development/ 301
/gitignore-generator/ /category/development/ 301
/gpt-token-encoder /category/text/ 301
/gpt-token-encoder/ /category/text/ 301
/gpt-token-estimator /category/text/ 301
/gpt-token-estimator/ /category/text/ 301
/gtin-validator /category/barcodes/ 301
/gtin-validator/ /category/barcodes/ 301
/gzip-converter / 301
/gzip-converter/ / 301
/har-sanitizer /category/network/ 301
/har-sanitizer/ /category/network/ 301
/hdd-calculator /category/network/ 301
/hdd-calculator/ /category/network/ 301
/hex-converter / 301
/hex-converter/ / 301
/hex-file-converter /category/development/ 301
/hex-file-converter/ /category/development/ 301
/hmac-generator /category/crypto/ 301
/hmac-generator/ /category/crypto/ 301
/htaccess-generator /category/network/ 301
/htaccess-generator/ /category/network/ 301
/html-cleaner /category/web/ 301
/html-cleaner/ /category/web/ 301
/html-entities /category/web/ 301
/html-entities/ /category/web/ 301
/html-minifier /category/web/ 301
/html-minifier/ /category/web/ 301
/html-to-data /category/web/ 301
/html-to-data/ /category/web/ 301
/html-to-xhtml /category/web/ 301
/html-to-xhtml/ /category/web/ 301
/html-wysiwyg-editor /category/web/ 301
/html-wysiwyg-editor/ /category/web/ 301
/htpasswd-generator /category/network/ 301
/htpasswd-generator/ /category/network/ 301
/http-status-codes /category/web/ 301
/http-status-codes/ /category/web/ 301
/https-tester / 301
/https-tester/ / 301
/i-and-l-checker /category/text/ 301
/i-and-l-checker/ /category/text/ 301
/iban-validator-and-parser /category/data/ 301
/iban-validator-and-parser/ /category/data/ 301
/ical-generator /category/datetime/ 301
/ical-generator/ /category/datetime/ 301
/ical-merger /category/datetime/ 301
/ical-merger/ /category/datetime/ 301
/ical-parser /category/datetime/ 301
/ical-parser/ /category/datetime/ 301
/ico-converter /category/images/ 301
/ico-converter/ /category/images/ 301
/ies-lighting-guidelines /category/data/ 301
/ies-lighting-guidelines/ /category/data/ 301
/illuminance-converter / 301
/illuminance-converter/ / 301
/image-color-inverter /category/images/ 301
/image-color-inverter/ /category/images/ 301
/image-comparer /category/images/ 301
/image-comparer/ /category/images/ 301
/image-exif-reader /category/images/ 301
/image-exif-reader/ /category/images/ 301
/image-to-ascii-art /category/text/ 301
/image-to-ascii-art/ /category/text/ 301
/image-to-css /category/web/ 301
/image-to-css/ /category/web/ 301
/installment-apr-calculator /category/finance/ 301
/installment-apr-calculator/ /category/finance/ 301
/integers-to-ip /category/network/ 301
/integers-to-ip/ /category/network/ 301
/ip-cidr-to-range /category/network/ 301
/ip-cidr-to-range/ /category/network/ 301
/ip-include-exclude /category/network/ 301
/ip-include-exclude/ /category/network/ 301
/ip-range-to-cidr /category/network/ 301
/ip-range-to-cidr/ /category/network/ 301
/iptables-generator /category/network/ 301
/iptables-generator/ /category/network/ 301
/ipv4-address-converter /category/network/ 301
/ipv4-address-converter/ /category/network/ 301
/ipv4-range-expander /category/network/ 301
/ipv4-range-expander/ /category/network/ 301
/ipv4-subnet-calculator /category/network/ 301
/ipv4-subnet-calculator/ /category/network/ 301
/ipv4-subnets-list /category/network/ 301
/ipv4-subnets-list/ /category/network/ 301
/ipv6-address-converter /category/network/ 301
/ipv6-address-converter/ /category/network/ 301
/ipv6-subnet-calculator /category/network/ 301
/ipv6-subnet-calculator/ /category/network/ 301
/ipv6-ula-generator /category/network/ 301
/ipv6-ula-generator/ /category/network/ 301
/isbn-validator-and-parser /category/data/ 301
/isbn-validator-and-parser/ /category/data/ 301
/iso-3166-searcher /category/data/ 301
/iso-3166-searcher/ /category/data/ 301
/iso-639-searcher /category/data/ 301
/iso-639-searcher/ /category/data/ 301
/jasypt-string-encryption /category/crypto/ 301
/jasypt-string-encryption/ /category/crypto/ 301
/javascript-obfuscator /category/development/ 301
/javascript-obfuscator/ /category/development/ 301
/javascript-prettifier /category/development/ 301
/javascript-prettifier/ /category/development/ 301
/javascript-to-json /category/json/ 301
/javascript-to-json/ /category/json/ 301
/jq-memo / 301
/jq-memo/ / 301
/jq-tester /category/json/ 301
/jq-tester/ /category/json/ 301
/js-unobfuscator /category/development/ 301
/js-unobfuscator/ /category/development/ 301
/json-editor /category/json/ 301
/json-editor/ /category/json/ 301
/json-escaper /category/json/ 301
/json-escaper/ /category/json/ 301
/json-flatten-nestify /category/json/ 301
/json-flatten-nestify/ /category/json/ 301
/json-linter /category/json/ 301
/json-linter/ /category/json/ 301
/json-merger /category/json/ 301
/json-merger/ /category/json/ 301
/json-patch /category/json/ 301
/json-patch/ /category/json/ 301
/json-query /category/json/ 301
/json-query/ /category/json/ 301
/json-size-analyzer /category/json/ 301
/json-size-analyzer/ /category/json/ 301
/json-sort-master /category/json/ 301
/json-sort-master/ /category/json/ 301
/json-to-csharp /category/json/ 301
/json-to-csharp/ /category/json/ 301
/json-to-data /category/json/ 301
/json-to-data/ /category/json/ 301
/json-to-env /category/json/ 301
/json-to-env/ /category/json/ 301
/json-to-go /category/json/ 301
/json-to-go/ /category/json/ 301
/json-to-java /category/json/ 301
/json-to-java/ /category/json/ 301
/json-to-javascript /category/json/ 301
/json-to-javascript/ /category/json/ 301
/json-to-msgpack /category/json/ 301
/json-to-msgpack/ /category/json/ 301
/json-to-object /category/json/ 301
/json-to-object/ /category/json/ 301
/json-to-php /category/json/ 301
/json-to-php/ /category/json/ 301
/json-to-php-array /category/json/ 301
/json-to-php-array/ /category/json/ 301
/json-to-protobuf /category/development/ 301
/json-to-protobuf/ /category/development/ 301
/json-to-python /category/json/ 301
/json-to-python/ /category/json/ 301
/json-to-schema /category/json/ 301
/json-to-schema/ /category/json/ 301
/json-to-sql-ddl /category/json/ 301
/json-to-sql-ddl/ /category/json/ 301
/json-to-sql-insert /category/development/ 301
/json-to-sql-insert/ /category/development/ 301
/json-to-toml /category/json/ 301
/json-to-toml/ /category/json/ 301
/json-to-toon /category/text/ 301
/json-to-toon/ /category/text/ 301
/json-to-ts /category/json/ 301
/json-to-ts/ /category/json/ 301
/json-to-typescript /category/development/ 301
/json-to-typescript/ /category/development/ 301
/json-to-xml /category/json/ 301
/json-to-xml/ /category/json/ 301
/jsonpath-memo / 301
/jsonpath-memo/ / 301
/jwt-generator /category/crypto/ 301
/jwt-generator/ /category/crypto/ 301
/k6-script-generator /category/development/ 301
/k6-script-generator/ /category/development/ 301
/k8s-memo / 301
/k8s-memo/ / 301
/k8s-rbac-generator / 301
/k8s-rbac-generator/ / 301
/keyboard-layout-converter /category/text/ 301
/keyboard-layout-converter/ /category/text/ 301
/keycode-info / 301
/keycode-info/ / 301
/length-converter / 301
/length-converter/ / 301
/levenshtein-calculator /category/text/ 301
/levenshtein-calculator/ /category/text/ 301
/list-comparer /category/text/ 301
/list-comparer/ /category/text/ 301
/logrotate-generator /category/network/ 301
/logrotate-generator/ /category/network/ 301
/lorem-ipsum-generator /category/text/ 301
/lorem-ipsum-generator/ /category/text/ 301
/luhn-validator /category/data/ 301
/luhn-validator/ /category/data/ 301
/mac-address-converter /category/network/ 301
/mac-address-converter/ /category/network/ 301
/mac-address-generator /category/network/ 301
/mac-address-generator/ /category/network/ 301
/mac-address-lookup /category/network/ 301
/mac-address-lookup/ /category/network/ 301
/mailto-generator /category/development/ 301
/mailto-generator/ /category/development/ 301
/markdown-cheatsheet / 301
/markdown-cheatsheet/ / 301
/markdown-diff /category/markdown/ 301
/markdown-diff/ /category/markdown/ 301
/markdown-editor /category/markdown/ 301
/markdown-editor/ /category/markdown/ 301
/markdown-format-converter /category/markdown/ 301
/markdown-format-converter/ /category/markdown/ 301
/markdown-lorem-ipsum /category/markdown/ 301
/markdown-lorem-ipsum/ /category/markdown/ 301
/markdown-table-prettifier /category/markdown/ 301
/markdown-table-prettifier/ /category/markdown/ 301
/markdown-to-data /category/markdown/ 301
/markdown-to-data/ /category/markdown/ 301
/markdown-to-docx /category/markdown/ 301
/markdown-to-docx/ /category/markdown/ 301
/markdown-to-text /category/markdown/ 301
/markdown-to-text/ /category/markdown/ 301
/markdown-toc-generator /category/markdown/ 301
/markdown-toc-generator/ /category/markdown/ 301
/mass-converter / 301
/mass-converter/ / 301
/math-evaluator / 301
/math-evaluator/ / 301
/math-formats-converter / 301
/math-formats-converter/ / 301
/math-ocr / 301
/math-ocr/ / 301
/mermaid-exporter /category/text/ 301
/mermaid-exporter/ /category/text/ 301
/mermaid-previewer /category/text/ 301
/mermaid-previewer/ /category/text/ 301
/og-meta-generator /category/development/ 301
/og-meta-generator/ /category/development/ 301
/middle-endian-converter / 301
/middle-endian-converter/ / 301
/mime-converter / 301
/mime-converter/ / 301
/mime-types /category/web/ 301
/mime-types/ /category/web/ 301
/mongo-objectid-converter / 301
/mongo-objectid-converter/ / 301
/msgpack-to-json /category/json/ 301
/msgpack-to-json/ /category/json/ 301
/mttdl-calculator /category/network/ 301
/mttdl-calculator/ /category/network/ 301
/multi-link-downloader /category/network/ 301
/multi-link-downloader/ /category/network/ 301
/nano-memo / 301
/nano-memo/ / 301
/nanoid-generator /category/generators/ 301
/nanoid-generator/ /category/generators/ 301
/nginx-formatter /category/network/ 301
/nginx-formatter/ /category/network/ 301
/nginx-memo / 301
/nginx-memo/ / 301
/niceware-bytes-to-passphrase /category/crypto/ 301
/niceware-bytes-to-passphrase/ /category/crypto/ 301
/nmap-command-builder / 301
/nmap-command-builder/ / 301
/numeronym-generator /category/generators/ 301
/numeronym-generator/ /category/generators/ 301
/objgen-html /category/xml/ 301
/objgen-html/ /category/xml/ 301
/objgen-json /category/json/ 301
/objgen-json/ /category/json/ 301
/online-wiktionary /category/data/ 301
/online-wiktionary/ /category/data/ 301
/option43-generator /category/network/ 301
/option43-generator/ /category/network/ 301
/otp-generator /category/generators/ 301
/otp-generator/ /category/generators/ 301
/outlook-parser / 301
/outlook-parser/ / 301
/overtime-pay-calculator /category/finance/ 301
/overtime-pay-calculator/ /category/finance/ 301
/pack-files-for-ai /category/text/ 301
/pack-files-for-ai/ /category/text/ 301
/parquets-reader / 301
/parquets-reader/ / 301
/paseto-encryption /category/crypto/ 301
/paseto-encryption/ /category/crypto/ 301
/paseto-signing /category/crypto/ 301
/paseto-signing/ /category/crypto/ 301
/passphrase-generator /category/generators/ 301
/passphrase-generator/ /category/generators/ 301
/password-strength-analyser /category/network/ 301
/password-strength-analyser/ /category/network/ 301
/paste-as-markdown /category/markdown/ 301
/paste-as-markdown/ /category/markdown/ 301
/pdf-encrypt /category/pdf/ 301
/pdf-encrypt/ /category/pdf/ 301
/pdf-extract /category/pdf/ 301
/pdf-extract/ /category/pdf/ 301
/pdf-linearize /category/pdf/ 301
/pdf-linearize/ /category/pdf/ 301
/pdf-signature-checker /category/pdf/ 301
/pdf-signature-checker/ /category/pdf/ 301
/pdf-unlock /category/pdf/ 301
/pdf-unlock/ /category/pdf/ 301
/pension-estimator /category/finance/ 301
/pension-estimator/ /category/finance/ 301
/pgp-encryption /category/crypto/ 301
/pgp-encryption/ /category/crypto/ 301
/pgp-file-encryption /category/crypto/ 301
/pgp-file-encryption/ /category/crypto/ 301
/pgp-key-pair-generator /category/crypto/ 301
/pgp-key-pair-generator/ /category/crypto/ 301
/phone-parser-and-formatter /category/data/ 301
/phone-parser-and-formatter/ /category/data/ 301
/php-array-to-json /category/json/ 301
/php-array-to-json/ /category/json/ 301
/picomatch-tester /category/development/ 301
/picomatch-tester/ /category/development/ 301
/pin-code-generator /category/generators/ 301
/pin-code-generator/ /category/generators/ 301
/port-numbers /category/network/ 301
/port-numbers/ /category/network/ 301
/potrace /category/images/ 301
/potrace/ /category/images/ 301
/power-converter / 301
/power-converter/ / 301
/powershell-memo / 301
/powershell-memo/ / 301
/pressure-converter / 301
/pressure-converter/ / 301
/properties-converter /category/converters/ 301
/properties-converter/ /category/converters/ 301
/properties-to-yaml /category/converters/ 301
/properties-to-yaml/ /category/converters/ 301
/ptr-dns-generator /category/network/ 301
/ptr-dns-generator/ /category/network/ 301
/punycode-converter /category/network/ 301
/punycode-converter/ /category/network/ 301
/qr-contact-info-generator /category/barcodes/ 301
/qr-contact-info-generator/ /category/barcodes/ 301
/quote-converter /category/development/ 301
/quote-converter/ /category/development/ 301
/raid-calculator /category/network/ 301
/raid-calculator/ /category/network/ 301
/random-line-picker /category/text/ 301
/random-line-picker/ /category/text/ 301
/random-port-generator /category/network/ 301
/random-port-generator/ /category/network/ 301
/regex-memo / 301
/regex-memo/ / 301
/relationship-calculator /category/text/ 301
/relationship-calculator/ /category/text/ 301
/rem-px-converter /category/web/ 301
/rem-px-converter/ /category/web/ 301
/remove-exif /category/images/ 301
/remove-exif/ /category/images/ 301
/resistor-calculator / 301
/resistor-calculator/ / 301
/restic-command-generator /category/network/ 301
/restic-command-generator/ /category/network/ 301
/rj45-memo / 301
/rj45-memo/ / 301
/roman-numeral-converter /category/converters/ 301
/roman-numeral-converter/ /category/converters/ 301
/rsa-ecdsa-signing /category/crypto/ 301
/rsa-ecdsa-signing/ /category/crypto/ 301
/rsa-encryption /category/crypto/ 301
/rsa-encryption/ /category/crypto/ 301
/rsa-key-pair-generator /category/crypto/ 301
/rsa-key-pair-generator/ /category/crypto/ 301
/rsvp-reader /category/text/ 301
/rsvp-reader/ /category/text/ 301
/rsync-generator /category/network/ 301
/rsync-generator/ /category/network/ 301
/rune-converter /category/text/ 301
/rune-converter/ /category/text/ 301
/running-pace-calculator /category/data/ 301
/running-pace-calculator/ /category/data/ 301
/safelink-decoder / 301
/safelink-decoder/ / 301
/saml-parser /category/crypto/ 301
/saml-parser/ /category/crypto/ 301
/screen-memo / 301
/screen-memo/ / 301
/sed-command-generator /category/text/ 301
/sed-command-generator/ /category/text/ 301
/sed-memo / 301
/sed-memo/ / 301
/sensitive-data-masker / 301
/sensitive-data-masker/ / 301
/serial-console / 301
/serial-console/ / 301
/severance-calculator /category/finance/ 301
/severance-calculator/ /category/finance/ 301
/shamirs-secret-sharing /category/crypto/ 301
/shamirs-secret-sharing/ /category/crypto/ 301
/sharepoint-decoder / 301
/sharepoint-decoder/ / 301
/shell-formatter /category/network/ 301
/shell-formatter/ /category/network/ 301
/shell-linearizer /category/network/ 301
/shell-linearizer/ /category/network/ 301
/short-urls-expander / 301
/short-urls-expander/ / 301
/shutdown-command-generator /category/network/ 301
/shutdown-command-generator/ /category/network/ 301
/si-prefixes-converter / 301
/si-prefixes-converter/ / 301
/sip-auth /category/network/ 301
/sip-auth/ /category/network/ 301
/sla-calculator /category/data/ 301
/sla-calculator/ /category/data/ 301
/slugify-string /category/web/ 301
/slugify-string/ /category/web/ 301
/smart-raw-converter / 301
/smart-raw-converter/ / 301
/smart-text-replacer /category/text/ 301
/smart-text-replacer/ /category/text/ 301
/snowflake-id-extractor / 301
/snowflake-id-extractor/ / 301
/social-link-sharer /category/text/ 301
/social-link-sharer/ /category/text/ 301
/software-licence-compatibility /category/data/ 301
/software-licence-compatibility/ /category/data/ 301
/speed-converter / 301
/speed-converter/ / 301
/spf-dns-generator /category/network/ 301
/spf-dns-generator/ /category/network/ 301
/sql-minifier /category/development/ 301
/sql-minifier/ /category/development/ 301
/sql-parameters /category/development/ 301
/sql-parameters/ /category/development/ 301
/ssl-cert-converter /category/crypto/ 301
/ssl-cert-converter/ /category/crypto/ 301
/stacktrace-prettier /category/development/ 301
/stacktrace-prettier/ /category/development/ 301
/string-escaper /category/development/ 301
/string-escaper/ /category/development/ 301
/string-obfuscator /category/text/ 301
/string-obfuscator/ /category/text/ 301
/svg-placeholder-generator /category/web/ 301
/svg-placeholder-generator/ /category/web/ 301
/svg-previewer /category/images/ 301
/svg-previewer/ /category/images/ 301
/swagger-ui-tester /category/development/ 301
/swagger-ui-tester/ /category/development/ 301
/tab-to-spaces /category/text/ 301
/tab-to-spaces/ /category/text/ 301
/tax-rate-calculator /category/finance/ 301
/tax-rate-calculator/ /category/finance/ 301
/tcpdump-generator / 301
/tcpdump-generator/ / 301
/temperature-converter / 301
/temperature-converter/ / 301
/text-to-binary /category/converters/ 301
/text-to-binary/ /category/converters/ 301
/text-to-nato-alphabet /category/text/ 301
/text-to-nato-alphabet/ /category/text/ 301
/text-to-unicode /category/converters/ 301
/text-to-unicode/ /category/converters/ 301
/text-to-unicode-names /category/text/ 301
/text-to-unicode-names/ /category/text/ 301
/time-alarm /category/datetime/ 301
/time-alarm/ /category/datetime/ 301
/tip-calculator / 301
/tip-calculator/ / 301
/tmux-memo / 301
/tmux-memo/ / 301
/toml-linter / 301
/toml-linter/ / 301
/toml-to-json / 301
/toml-to-json/ / 301
/toml-to-yaml / 301
/toml-to-yaml/ / 301
/toon-to-json /category/text/ 301
/toon-to-json/ /category/text/ 301
/torrent-to-magnet /category/converters/ 301
/torrent-to-magnet/ /category/converters/ 301
/traefik-compose-maker / 301
/traefik-compose-maker/ / 301
/translator /category/text/ 301
/translator/ /category/text/ 301
/trigo-viewer / 301
/trigo-viewer/ / 301
/ttl-calculator /category/datetime/ 301
/ttl-calculator/ /category/datetime/ 301
/ufw-generator /category/network/ 301
/ufw-generator/ /category/network/ 301
/ulid-generator /category/converters/ 301
/ulid-generator/ /category/converters/ 301
/unemployment-benefit-calculator /category/finance/ 301
/unemployment-benefit-calculator/ /category/finance/ 301
/unicode-to-java-entities /category/converters/ 301
/unicode-to-java-entities/ /category/converters/ 301
/unicode-formatter /category/text/ 301
/unicode-formatter/ /category/text/ 301
/unicode-search /category/data/ 301
/unicode-search/ /category/data/ 301
/unicode-to-gsm7 /category/text/ 301
/unicode-to-gsm7/ /category/text/ 301
/url-builder / 301
/url-builder/ / 301
/url-cleaner /category/web/ 301
/url-cleaner/ /category/web/ 301
/url-fanger /category/web/ 301
/url-fanger/ /category/web/ 301
/url-parser / 301
/url-parser/ / 301
/url-redirection-checker /category/network/ 301
/url-redirection-checker/ /category/network/ 301
/url-text-fragment-maker /category/web/ 301
/url-text-fragment-maker/ /category/web/ 301
/user-agent-parser /category/web/ 301
/user-agent-parser/ /category/web/ 301
/utm-url-generator /category/web/ 301
/utm-url-generator/ /category/web/ 301
/uuid-converter /category/generators/ 301
/uuid-converter/ /category/generators/ 301
/vat-validator /category/data/ 301
/vat-validator/ /category/data/ 301
/vim-memo / 301
/vim-memo/ / 301
/visual-subnet-calculator /category/network/ 301
/visual-subnet-calculator/ /category/network/ 301
/volume-converter / 301
/volume-converter/ / 301
/volume-flow-rate-converter / 301
/volume-flow-rate-converter/ / 301
/websocket-tester /category/network/ 301
/websocket-tester/ /category/network/ 301
/week-number-converter /category/datetime/ 301
/week-number-converter/ /category/datetime/ 301
/which-day /category/datetime/ 301
/which-day/ /category/datetime/ 301
/wireguard-config-generator /category/network/ 301
/wireguard-config-generator/ /category/network/ 301
/wpa-psk-generator /category/network/ 301
/wpa-psk-generator/ /category/network/ 301
/x-vr-spamcause-decoder /category/network/ 301
/x-vr-spamcause-decoder/ /category/network/ 301
/x509-certificate-generator /category/crypto/ 301
/x509-certificate-generator/ /category/crypto/ 301
/xml-linter /category/xml/ 301
/xml-linter/ /category/xml/ 301
/xpath-memo / 301
/xpath-memo/ / 301
/xpath-tester /category/xml/ 301
/xpath-tester/ /category/xml/ 301
/xslt-tester /category/xml/ 301
/xslt-tester/ /category/xml/ 301
/yaml-flatten-nestify /category/yaml/ 301
/yaml-flatten-nestify/ /category/yaml/ 301
/yaml-merger /category/yaml/ 301
/yaml-merger/ /category/yaml/ 301
/yaml-to-toml /category/yaml/ 301
/yaml-to-toml/ /category/yaml/ 301
/zalgo /category/text/ 301
/zalgo/ /category/text/ 301
/zellij-memo / 301
/zellij-memo/ / 301
/zpool-calculator /category/network/ 301
/zpool-calculator/ /category/network/ 301
/zpool-memo /category/network/ 301
/zpool-memo/ /category/network/ 301
/zxcvbn-password-strength /category/network/ 301
/zxcvbn-password-strength/ /category/network/ 301
/fortune-wheel / 301
/fortune-wheel/ / 301
/pomodoro-timer /category/development/ 301
/pomodoro-timer/ /category/development/ 301
/countdown /category/datetime/ 301
/countdown/ /category/datetime/ 301
/mic-tester /category/network/ 301
/mic-tester/ /category/network/ 301
/morse-converter /category/text/ 301
/morse-converter/ /category/text/ 301
/wifi-qr-code-generator /category/barcodes/ 301
/wifi-qr-code-generator/ /category/barcodes/ 301
/keyboard-tester / 301
/keyboard-tester/ / 301
/weather / 301
/weather/ / 301

# ============================================================================
# 工具合并：/text-join → /text-merge（2026-10-13）
#
# 两者核心功能重复（都是「多行文本用分隔符拼成一行」）。保留功能更多的 /text-merge
# （多列合并 / 输入列分隔符 / 复制为 TSV / 导出 Excel / 跳过空值），
# 并把 /text-join 独有的「去首尾空格 / 删除所有空格」两个选项迁了过去。
# 因为存在功能等价页，这里 301 到工具页而不是分类页 —— 权重不流失，且老链接直达可用工具。
# ============================================================================
/text-join        /text-format/   301
/text-join/       /text-format/   301

# 2026-10-13 下线 html-to-pdf
/html-to-pdf / 301
/html-to-pdf/ / 301

# ============================================================================
# 金额家族 4→1 融合（2026-10-15）
#
# /english-amount（SAY + 币种 + ONLY，6 币种）与 /english-numbers（数字 ↔ 英文读数）
# 的能力已全部并入 /rmb-numbers（四 Tab：人民币大写 / 英文大写金额 / 数字转英文 /
# 英文转数字，批量行对行 + 逐行复制 + 导出）。因为存在功能等价页，这里 301 到
# 工具页而不是分类页 —— 权重不流失，且老链接直达可用工具。
# 同时 /number-process 移除三个重复 op（转为英文大写/英文金额/中文金额），该页保留。
# ============================================================================
/english-amount   /rmb-numbers/   301
/english-amount/  /rmb-numbers/   301
/english-numbers  /rmb-numbers/   301
/english-numbers/ /rmb-numbers/   301

# ============================================================================
# 2026-10-15 文本家族融合：text-format（文本处理）吸收 text-dedupe / text-merge /
# text-split / text-workflow 四工具（能力全部并入，含一键预设层 + 重复统计 Tab）。
# 因为存在功能等价页，四个旧路径 301 到 /text-format/ 工具页而不是分类页 ——
# 权重不流失，且老链接直达可用工具。list-converter 保留独立，不重定向。
# ============================================================================
/text-dedupe   /text-format/   301
/text-dedupe/  /text-format/   301
/text-merge    /text-format/   301
/text-merge/   /text-format/   301
/text-split    /text-format/   301
/text-split/   /text-format/   301
/text-workflow /text-format/   301
/text-workflow/ /text-format/  301

# ============================================================================
# /cookies 已并入 /privacy（Cookie 只有广告退出链接三行，其余内容原本就是重复的）；
# /open-source 已并入 /terms 的「开源与源码」小节（GPLv3 + 源码获取地址）。
# 两个老地址都做 301，避免老外链与搜索结果直接 404。
# ============================================================================
/cookies       /privacy/    301
/cookies/      /privacy/    301
/open-source   /terms/      301
/open-source/  /terms/      301
