Files
blog/scripts/ops/seo-unblock-finish.sh
T
wait4xandGLM-5.3 2b8353837a feat(ops): SEO 解封收尾脚本——default 混合文件逐块精确锚定
default 内四 server 块共存(三面板+博客),文件级 v3 脚本无法区
分;本脚本按各自 server_name 锚定:面板块补 noindex、博客块加
/admin/ 局部;幂等可重跑、备份出加载路径、nginx -t 失败回滚、
nginx -T 配置级终验(不受边缘缓存干扰)。

验证: bash -n 语法过;锚定正则对 default 实文件 server_name 四行
干跑(面板命中/博客精确/互不误中)

Spec: none (用户操作单自动化收尾件)

Co-authored-by: GLM-5.3
2026-11-01 11:17:45 +08:00

89 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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