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
This commit is contained in:
1 parent
3b65cc47ec
commit
2b8353837a
1 file changed
+88
Executable
+88
@@ -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
|
||||||
Reference in new issue
Block a user