From 2b8353837aaafa5f3c8e0f2fedc6a7459083e727 Mon Sep 17 00:00:00 2001 From: wait4xx Date: Sun, 1 Nov 2026 11:17:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(ops):=20SEO=20=E8=A7=A3=E5=B0=81=E6=94=B6?= =?UTF-8?q?=E5=B0=BE=E8=84=9A=E6=9C=AC=E2=80=94=E2=80=94default=20?= =?UTF-8?q?=E6=B7=B7=E5=90=88=E6=96=87=E4=BB=B6=E9=80=90=E5=9D=97=E7=B2=BE?= =?UTF-8?q?=E7=A1=AE=E9=94=9A=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit default 内四 server 块共存(三面板+博客),文件级 v3 脚本无法区 分;本脚本按各自 server_name 锚定:面板块补 noindex、博客块加 /admin/ 局部;幂等可重跑、备份出加载路径、nginx -t 失败回滚、 nginx -T 配置级终验(不受边缘缓存干扰)。 验证: bash -n 语法过;锚定正则对 default 实文件 server_name 四行 干跑(面板命中/博客精确/互不误中) Spec: none (用户操作单自动化收尾件) Co-authored-by: GLM-5.3 --- scripts/ops/seo-unblock-finish.sh | 88 +++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 scripts/ops/seo-unblock-finish.sh diff --git a/scripts/ops/seo-unblock-finish.sh b/scripts/ops/seo-unblock-finish.sh new file mode 100755 index 0000000..b82f846 --- /dev/null +++ b/scripts/ops/seo-unblock-finish.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +# SEO 解封收尾脚本(default 混合文件专用,seo-unblock.sh v3 之后的最后一步) +# 背景:/etc/nginx/sites-enabled/default 内含四个 server 块(dpanel/ms365/ddns 面板 + 博客主站), +# 文件级脚本无法区分——本脚本按各自 server_name 精确锚定逐块处理。 +# 作用:①三面板块补回 noindex ②博客块加 /admin/ 局部 ③nginx -t 通过才重载(失败回滚) +# ④配置级终验(sudo nginx -T,不受 ESA 边缘缓存干扰) +# 用法:sudo bash scripts/ops/seo-unblock-finish.sh (幂等,可重复跑) +set -euo pipefail +DEFAULT=/etc/nginx/sites-enabled/default +BAKDIR=/tmp/seo-finish-bak-$(date +%s) + +echo "==== ① 现状(default 四块)====" +grep -n "server_name" "$DEFAULT" | head -6 + +echo +echo "==== ② 变更计划 ====" +for h in dpanel ms365 ddns; do + if grep -q "server_name $h.wait4x.online" "$DEFAULT"; then + if sed -n "/server_name $h.wait4x.online;/,/}/p" "$DEFAULT" | grep -q "X-Robots-Tag"; then + echo " [跳过] $h 已有 noindex" + else + echo " [补回] $h 块加 add_header X-Robots-Tag noindex always;" + fi + fi +done +if grep -q "location /admin/" "$DEFAULT"; then + echo " [跳过] 博客块已有 /admin/ 局部" +else + echo " [新增] 博客块(server_name wait4x.online;)加 location /admin/ { noindex }" +fi + +echo +read -rp ">> 按计划执行?(y/N) " ok; [ "$ok" = "y" ] || { echo "已取消"; exit 0; } + +echo +echo "==== ③ 执行 ====" +mkdir -p "$BAKDIR" +cp "$DEFAULT" "$BAKDIR/default" +echo " 备份:$BAKDIR/default" + +for h in dpanel ms365 ddns; do + if grep -q "server_name $h.wait4x.online" "$DEFAULT" && \ + ! sed -n "/server_name $h.wait4x.online;/,/}/p" "$DEFAULT" | grep -q "X-Robots-Tag"; then + sed -i "/server_name $h.wait4x.online;/a\\ add_header X-Robots-Tag noindex always;" "$DEFAULT" + echo " 已补:$h" + fi +done + +if ! grep -q "location /admin/" "$DEFAULT"; then + sed -i "/server_name wait4x.online;/a\\ location /admin/ { add_header X-Robots-Tag noindex always; }" "$DEFAULT" + echo " 已加:博客 /admin/ 局部" +fi + +echo +echo "==== ④ 语法检查+重载(失败回滚)====" +if ! nginx -t; then + echo "!! nginx -t 失败,回滚" + cp "$BAKDIR/default" "$DEFAULT" + nginx -t && systemctl reload nginx + echo "已回滚,把报错发给 research"; exit 1 +fi +systemctl reload nginx && echo " nginx 已重载" + +echo +echo "==== ⑤ 配置级终验(权威口径)====" +echo "-- 生效的 noindex 分布(server_name → 头/局部)--" +nginx -T 2>/dev/null | grep -B2 "X-Robots-Tag" \ + | grep -E "server_name|X-Robots|location /admin" | sed 's/^ *//' | sort -u | sed 's/^/ /' + +echo +echo "-- 判定 --" +BLOG_GLOBAL=$(nginx -T 2>/dev/null | sed -n '/server_name wait4x\.online;/,/^ server\|^}/p' | grep -c "X-Robots-Tag" ) +ADMIN=$(nginx -T 2>/dev/null | grep -c "location /admin/") +PANELS=$(for h in dpanel ms365 ddns; do nginx -T 2>/dev/null | sed -n "/server_name $h\.wait4x\.online;/,/}/p" | grep -c X-Robots; done | paste -sd+ | bc) +echo " 博客块全局 noindex:$BLOG_GLOBAL(期望 0,仅 /admin/ 局部算正常时此处计 location 行)" +echo " /admin/ 局部:$ADMIN(期望 ≥1) 三面板 noindex 合计:$PANELS(期望 3)" +rm -rf "$BAKDIR" + +cat <<'EOF' + +==== ⑥ 最后一步:ESA 控制台(手动)==== + 1. 全站 purge:wait4x.online(边缘缓存里的旧 noindex 头还活着) + 2. HTML 边缘缓存 TTL 调 ≤1 小时 + 3. 加规则:/artalk/api/* 绕过缓存 + 4. 顺带查 git.wait4x.online 的 522(源站健康/回源配置) + +完成后把 ⑤ 的输出发 research:跑生产 Lighthouse 入档(预期 SEO 60→95+)。 +EOF