站点: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 / 百度站长后台的抓取量曲线。这段时间不要再做大的结构改动。