站点:https://www.511yj.com(另有 bbs.511yj.com) 环境:WordPress + 主题 aldehyde(2015 年深度改造版)+ PHP 8.3.33 + 阿里云 ECS 完成日期:2026-10-06 状态:第一阶段全部收尾,进入 2~8 周的搜索引擎观察期


一、紧急故障修复(直接影响收录)

# 位置 问题 修法 验证
1 functions.php 反采集函数 空 UA 返回 500(蜘蛛以为站点故障) 改 403 + 蜘蛛白名单 + 删除误伤规则 /PHP/i 空 UA 返回 403 ✅
2 AIOSEO → 工具 → Robots.txt /wp-content/ 拦 CSS/JS、/pagephoto/ 拦配图、/category/ 拦分类页(自伤) 关闭自定义 robots.txt,用默认;开启 Block Internal Search URLs curl 确认三行消失 ✅
3 云锁防火墙 规则 351 误拦 AIOSEO 保存(把设置字段当 SQL 注入) 给规则 351 加白名单 后台能保存 ✅
4 jQuery Updater 插件 强制 jQuery 4.0.0,导致 external.js 报 zIndex 错误 停用并删除插件,回到 WP 核心自带 jQuery jQuery.fn.jquery = 3.7.1 ✅
5 站点地图冲突 XML Sitemap Generator 与 AIOSEO 同时生成地图 删除 XML Sitemap Generator sitemap.xml 归 AIOSEO ✅
6 WPJAM 抢走 title/description WPJAM 输出的 <title> 覆盖了 AIOSEO,导致精心填的关键词标题从未被搜索引擎使用 关闭 WPJAM 的 SEO 输出 见第五章第 3 条 ✅

二、主题模板修改

# 文件 修改内容
7 header.php 补 </head>(原全站缺失);补 wp_body_open();删除未定义的 $keywords/$description(PHP 8.3 报错且与 AIOSEO 重复);删除 IE8 兼容脚本;全部输出转义;站名统一 <h2>
8 page-shouye.php 加 sr-only 隐藏 H1(解决首页无 H1);id="small" → class="small"(约 60 处重复 ID)
9 content-single.php 特色图加 loading="lazy" + 空判断;删除百度分享(服务已下线)
10 content-xiangguan.php 整份重写:<? echo → <?php echo;query_posts → WP_Query;caller_get_posts → ignore_sticky_posts;ORDER BY RAND() → 按日期;删除重复第三块"相关文章"、空 <h3>、重复 ID;图片三级兜底
11 footer.php http → https(5 处);清理语义错误的 rel="designer";补 .mega-container 闭合;删除 360 收录 JS(document.write 阻塞渲染);版权年份自动

三、functions.php 修改

# 原行号 修改内容
12 514-524 删除 /go?url= base64 跳转(开放重定向漏洞 + 空壳页)→ 改为只加 nofollow noopener
13 285-294 删除 eval() 后门(文本小工具可执行任意 PHP)
14 396 删除 remove_action('wp_footer','wp_print_footer_scripts')(会丢 comment-reply、管理栏等)
15 454 登录页 logo http:// → home_url('/')
16 10-12 $content_width 640 → 750
17 485 img 快捷按钮 alt="511遇见" → alt=""(交给自动补 alt 处理)
18 433-437 newPostRefresh → wp_remote_get + blocking=false
19 663-670 IndexNow → blocking=false、timeout 10→5(保存不再卡 10 秒)
20 496-508 bread_nav() 全部输出转义
21 468 login_errors 返回 null → ''
22 582 登录 cookie 1 年 → 30 天
23 234 get_bloginfo('template_url') → get_template_directory_uri()(已废弃)
24 574、576 get_bloginfo('url') ×4 → yj_abs_url()(修废弃函数 + 双域名 bug)
25 全文 短标签 <? echo 全部清理(PHP 8 已移除短标签)

已扫描确认安全、无需修改的

位置 用法 判断
header.php:45 get_bloginfo('name') ✅ 安全,永不废弃
inc/extras.php:54,57 get_bloginfo('name'/'description') ✅ 安全

只有 url 和 template_url 两个参数被 WordPress 废弃,name/description/charset 一直正常。


四、新增代码(追加在 functions.php 末尾)

# 作用
26 自动补图片 alt:空 alt / "511遇见" / "请填写图片描述" 自动填「文章标题 配图N」,已认真填过的不覆盖
27 附件页 noindex(wp_robots 钩子)
28 附件页 301 跳转到所属文章(无归属则跳首页)
29 yj_abs_url() 辅助函数:相对路径补全,已是 http 开头的不重复拼域名
30 logo / 头部图强转 https(数据库存的是 http,输出时替换)
31 post_thumbnail_src() 重写:兜底图自动扫描 uploads/default/,按文章 ID 固定取一张(可缓存、不随机跳变)

兜底图目录

wp-content/uploads/default/ 放 3~5 张同尺寸图(建议 300×200),命名 1.jpg~5.jpg。 注意:img/ 是页脚二维码等专用图,pagephoto/ 是文章配图,都别混用。 仅当文章「无特色图 + 正文无图」时触发 —— 你每篇都设了特色图,所以基本用不上。

⚠️ 关于 nofollow 过滤器的版本选择

早期给的正则版 preg_replace_callback 会重写全文 HTML,在代码块、多行 <a>、属性值含 > 时可能破坏结构导致 CSS 失效。 推荐改用 WP 官方解析器版本(只改属性,不破坏字节):

add_filter('the_content','web589_the_content_nofollow',999);
function web589_the_content_nofollow($content){
    if ( empty( $content ) || ! class_exists( 'WP_HTML_Tag_Processor' ) ) {
        return $content;
    }
    $site = wp_parse_url( home_url(), PHP_URL_HOST );
    $p = new WP_HTML_Tag_Processor( $content );
    while ( $p->next_tag( 'a' ) ) {
        $href = $p->get_attribute( 'href' );
        if ( empty( $href ) ) continue;
        $host = wp_parse_url( $href, PHP_URL_HOST );
        if ( ! $host || substr( $host, -strlen( $site ) ) === $site ) continue;
        $p->set_attribute( 'rel', 'nofollow noopener' );
        $p->set_attribute( 'target', '_blank' );
    }
    return $p->get_updated_html();
}

五、后台设置调整

# 位置 设置
32 AIOSEO → Robots.txt AI 爬虫拦截:全不勾(当前缺流量,不该再拦)
33 后台 → 外观 → 菜单 首页 / BBS / 教程 三项 http → https
34 侧边栏搜索小工具 http://www.so.com/s → https
35 WPJAM → 增强优化 前端公共库 → s4.zstatic.net(原 cdnjs.cloudflare.com 国内常超时)
36 WPJAM → 增强优化 取消「分类链接简化」(与 WP No Category Base 插件重复)
37 WPJAM → 增强优化 Gravatar → Cravatar;Google 字体 → 中科大;Frame 嵌入 → 只允许同域名
38 WPJAM → 增强优化 「图片时间戳」保持勾选 ✅
39 WPJAM → 功能屏蔽 不勾:REST API、WP Cron、feed、oEmbed、RSD
40 WPJAM → 功能屏蔽 建议取消:屏蔽文章修订、屏蔽自动保存(与 functions.php 三重叠加,无回滚手段)
41 WPJAM → 扩展管理 关闭「链接跳转」 ← 它就是 /go?url= 的制造者
42 WPJAM → 扩展管理 关闭「相关文章」(与主题 content-xiangguan.php 重复)
43 WPJAM → 扩展管理 关闭「文章目录」 ← 会改坏正文 HTML,见第七章第 2 条
44 WPJAM → 扩展管理 关闭 SEO 设置(与 AIOSEO 抢 title/description)
45 WPJAM → 扩展管理 保留百度站长、Bing 站长工具(token 已填、推送有效)
46 WPJAM → 扩展管理 保留 Rewrite 优化;移动主题、文章类型转换器可关

WPJAM vs AIOSEO 元信息冲突(今日最实在的一处修复)

改之前:WPJAM 抢走了最重要的两个标签,你在 AIOSEO 里填的标题搜索引擎根本不用。

标签 之前(WPJAM) 现在(AIOSEO)
<title> 511遇见 \| 不一样的遇见(零关键词) 511遇见 - 易语言Lua\|大漠多线程\|火山视窗\|WordPress技术分享 ✅
description 逗号堆砌十几个词 AIOSEO 的完整通顺版本 ✅
keywords 存在(无效标签) 已消失 ✅
og:title 与 title 不一致 与 title 一致 ✅
canonical / JSON-LD AIOSEO AIOSEO ✅

改完之后仍可优化的两处(可选,不影响排名):

  • og:site_name 还是「511遇见 | 不一样的遇见」→ 去「设置 → 常规 → 站点标题」改成 511遇见
  • og:image 只有 130×50 → 社交分享时显示极小。建议做一张 1200×630 分享图,去 AIOSEO → 社交网络 → 默认社交图 设置

六、插件处置

✅ 已删除

插件 理由
XML Sitemap Generator for Google 与 AIOSEO 抢站点地图,还在根目录生成实体文件
jQuery Updater 已停用,WP 核心的 3.7.1 接管
Redirection 装了但没有需要跳转的 URL(分类合并已放弃),空壳留着无意义

⏸ 已停用,观察 3~5 天后删

插件 删之前要确认什么
Advanced Random Posts Widget 侧边栏少的那一栏确定不要了。想补空位去小工具区加个「最新文章」或「分类」,别装回它(随机内链不利于蜘蛛建立结构)
anyLink 确认文章外链是正常直链、没有 /go?url=
Database Backup for WordPress 先确认服务器/面板有自己的备份(阿里云 ECS 一般有快照),有就不用它
Export All URLs 🗑 先用一次:工具 → Export All URLs → 导出全站 URL 清单留着(百度主动推送要用),导出完再删

✅ 必须保留

插件 理由
多合一SEO集 (AIOSEO) 核心 SEO
Baidu Sitemap Generator 页脚 sitemap_baidu.xml 由它生成,删了页脚链接变 404(已验证 200)
WP No Category Base 负责 /category/ 的 301 跳转(已验证 301)
SM Sticky Clicky Star 首页「推荐阅读」Tab 读的就是它管理的置顶文章(无设置菜单,在文章列表的星星列)
Disable Comments RB 全站强制关评论(无独立菜单,开关在「设置 → 讨论」底部)
Redis Object Cache 数据库对象缓存
Cache Enabler 页面缓存(与 Redis 不冲突:一个管数据库查询,一个管整页)
Menu Icons / 经典小工具 / WPS隐藏登录 / WPJAM Basic 正常在用

删除原则

先停用 → 观察 2~5 天 → 确认无异常 → 再删除。 停用 = 能随时启用回来;删除 = 设置和文件都没了。 别无限期留着停用插件 —— 文件还在硬盘上,仍可被直接通过网址访问。


七、排障要点备忘(重要,以后改站先看这里)

1. 首页 9 宫格是硬编码分类 ID

page-shouye.php 的卡片栏目写死了分类 ID(辅助开发、编程语言、网游单机、手游单机、Bootstrap、Css/Html5、JavaScript/jquery、Apache/Nginx、网站运营 SEO)。 动任何分类结构前,先确认首页、导航有没有引用它 —— 改一个分类会连锁反应好几个地方。

2. ⚠️ WPJAM「文章目录」会改坏正文 HTML

设置成 H6 + 显示在文章内容前面 时,它会扫描 H2~H6 并重写 the_content。 后果:站名(H2)和侧边栏栏目标题(H2)被收进目录;遇到「h2/h3 标题 + <pre> 代码块」混合的文章会破坏标签结构,导致后面内容掉出 .entry-content 容器,CSS 整段失效。

症状:新发的带代码块的文章,排版"有的地方有样式、有的没有"。

解决:关闭该扩展。需要时改用 显示层级 H3 + 使用 [toc] 插入内容中,只在文章里写了 [toc] 的地方生成目录。

3. 云锁会拦截含代码的文章保存

在编辑器粘贴含 HTML/SQL/PHP 的内容时,POST 数据会命中 XSS 规则(编号 201,IMG 标签类)被拦,导致内容只存进去一部分。 解决:云锁加 URL 路径例外,豁免这三个后台接口:

/wp-admin/post.php
/wp-admin/admin-ajax.php
/wp-admin/async-upload.php

4. 数据库备份要选对时间点

改分类这类会动数据库的操作前,单独导出相关表(wp_terms / wp_term_taxonomy / wp_term_relationships)最精准。 阿里云整机快照是最后兜底 —— 它会把文件系统层面的代码改动一起回滚,代价太大,别轻易用。

5. 其他

  • 改主题文件后必须同步上传到阿里云 ECS —— 本地 xampp 改了,线上不会自动生效
  • 改完先清 Redis + Cache Enabler,再用无痕窗口验证
  • robots.txt 和 sitemap.xml 都是虚拟的,根目录找不到实体文件是正常的,不要手动上传
  • 云锁禁止根目录写入对 SEO 无影响,反而能防篡改
  • AIOSEO 的面包屑结构化数据(JSON-LD)不要关,它是加分项
  • 首页 H1 由 page-shouye.php 的 sr-only 隐藏标题提供;文章页 H1 是文章标题;站名统一 <h2>,避免双 H1

八、推送相关

项目 说明
IndexNow(Bing/Yandex/Naver 等) functions.php 钩子自动推送,已改 blocking=false。百度不支持 IndexNow
百度普通收录 API WPJAM 百度站长扩展,token 已填、推送有效。注意配额:一次性批量推 1000+ 条可能把剩余配额吃光,以后只推新文章
密钥 txt 文件 🔴 必须保留,主站和 bbs 两个根目录各一份。删了推送全部返回 403
push.php 批量脚本 🗑 用完即删,别长期留在公网(会被恶意调用触发 429 限流)
子域名独立 bbs.511yj.com 和 www.511yj.com 在 IndexNow 眼里是两个 host,各自的根目录都要有密钥文件

验证推送是否真正到达:百度搜索资源平台 → 资源提交 → 主动推送 → 看「已收录条数」(推送成功 ≠ 被收录)。


九、遗留待办(不影响运行)

项目 说明 优先级
处理「未分类」文章 首页 9 宫格有个卡片显示「没有分类」,是 WP 默认的 uncategorized。去文章列表筛「未分类」,给它们分好类,9 宫格就整齐了 中
开启 WP 自动更新 functions.php 568 行关闭了自动更新,出安全漏洞无补丁 中
恢复修订版本 WPJAM + functions.php 两处都禁了,改坏了没有回滚手段 中
精简空分类 只删文章数为 0 的分类即可,冷门分类不用动 —— 分类列表在侧边栏靠下,多几行无所谓 低
制作 1200×630 分享图 替换 130×50 的 og:image,改善微信/QQ 分享观感 低
原图压缩 旅游照片那批原图用 Smush/ShortPixel 压缩,不要手动删缩略图变体(老文章可能有硬编码引用) 低
日期粘连 老文章显示 2016-01-072016-07-10。需改 inc/template-tags.php。不影响 SEO 低
根目录"副本"php 文件 主题目录里若有 index.php 副本 之类,移出主题目录 中

十、常用验证命令(Windows CMD)

REM 先切 UTF-8,避免中文乱码
chcp 65001

REM 空 UA 是否 403
curl -s -o /dev/null -w "%{http_code}\n" -H "User-Agent:" https://www.511yj.com/

REM robots.txt
curl -s https://www.511yj.com/robots.txt

REM 站点地图归属(应显示 All in One SEO)
curl -s https://www.511yj.com/sitemap.xml | findstr /i "All in One"

REM 百度地图(必须 200,页脚在用)
curl -s -o /dev/null -w "%{http_code}\n" https://www.511yj.com/sitemap_baidu.xml

REM 首页 title(应显示 AIOSEO 版本)
curl -s https://www.511yj.com/ | findstr /i "<title>"

REM 首页是否还有 http 链接(无输出 = 通过)
curl -s https://www.511yj.com/ | findstr /i "http://www.511yj.com"

REM 分类旧链接是否 301
curl -s -o /dev/null -w "%{http_code}\n" https://www.511yj.com/category/front-end/

REM 附件页是否 301
curl -s -o /dev/null -w "%{http_code}\n" https://www.511yj.com/511yujian8

REM 文章里是否还有 /go?url=(无输出 = 通过)
curl -s https://www.511yj.com/sf-wydj-34.html > C:\t.html

REM 主题内查找短标签
cd C:\xampp\htdocs\wp-content\themes\aldehyde
findstr /s /i /n /c:"<? " *.php > C:\result.txt

REM 主题内查找废弃函数
findstr /s /i /n /c:"create_function" /c:"mysql_query" /c:"get_bloginfo" *.php > C:\result2.txt

CMD 输出中文乱码时,用 > C:\xxx.txt 存成文件再用记事本打开。 FINDSTR: 写入错误 是管道缓冲区被中文撑爆,不是站点问题。


十一、删除停用插件前的最终检查清单

跑一遍全过再删:

  • [ ] 首页正常(9 宫格、轮播、Tab 都在)
  • [ ] 分类页正常(/front-end/ 有文章、CSS 正常)
  • [ ] 文章页正常(打开带代码块的那篇,排版完整)
  • [ ] 侧边栏完整(搜索、最新文章、视频教程)
  • [ ] 附件页 301
  • [ ] sitemap.xml 归 AIOSEO
  • [ ] sitemap_baidu.xml 返回 200
  • [ ] 文章里搜不到 go?url

十二、本次优化成果总览

板块 状态
抓取通道(500→403、robots.txt 自伤解除、站点地图统一) ✅
PHP 8.3 兼容(短标签清零、废弃函数清零、jQuery 3.7.1) ✅
页面结构(H1、重复 ID、随机内链、附件页 301+noindex) ✅
安全(/go?url= 开放重定向、eval() 后门、未转义输出、logo 强转 https) ✅
元信息统一(WPJAM 抢 title/description 已解决) ✅
插件精简(从十几个减到约 10 个) ✅

下一步:等待 2~8 周,观察 Bing / 百度站长后台的抓取量曲线。这段时间不要再做大的结构改动。