活力39282
在线时间13640 小时
阅读权限200
管理员
自由的灵魂
- 积分
- 107434
- 主题
- 5630
- 回帖
- 26661
- 注册时间
- 2003-4-10
- 最后登录
- 2026-10-2
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、问题缘起
论坛已启用伪静态规则,但站内仍大量存在 forum.php?mod=viewthread&tid=xxx 形式的动态链接,导致:
| 问题 | 说明 | | 内容重复 | 同一帖子可通过动态和静态两个 URL 访问 | | 权重分散 | 搜索引擎无法确定哪个是权威版本 | | 爬取配额浪费 | 爬虫需要同时处理两套 URL | | canonical 治标不治本 | canonical 只影响索引,不阻止爬取 |
探讨中发现的核心疑问:
- 现代搜索引擎能否智能处理动态链接?
- 为什么淘帖页未改模板却已是伪静态?
- 模板中应该用 $thread[url] 还是硬编码静态地址?
- 手机版是否需要单独处理?
- 帖子详情页的「复制链接」如何伪静态化?
2、解决方案
(1)简要技术分析:
在模板层将所有指向帖子内容页的动态链接硬编码替换为伪静态格式,并在数据源层修复首页四格的 URL 生成逻辑。电脑版和手机版分别处理。
(2)修改文件列表:
电脑版:
| 操作 | 文件路径 | | 修改 | /template/default/forum/discuz.htm | | 修改 | /template/default/forum/forumdisplay_list.htm | | 修改 | /template/default/forum/ajax_threadlist.htm | | 修改 | /template/default/forum/guide_list_row.htm | | 修改 | /template/default/forum/guide.htm | | 修改 | /template/default/forum/viewthread.htm | | 修改 | /template/default/forum/recommend.htm | | 修改 | /template/default/tag/tagitem.htm | | 修改 | /template/default/ranklist/ranklist.htm | | 修改 | /template/default/common/block_thread.htm | | 修改 | /source/module/forum/forum_index.php(首页四格数据源) |
手机版:
| 操作 | 文件路径 | | 修改 | /template/default/touch/forum/discuz.htm | | 修改 | /template/default/touch/forum/forumdisplay.htm | | 修改 | /template/default/touch/forum/guide_list_row.htm |
(3)关键代码段:
模板层替换规律(所有模板通用):
将:
- href="forum.php?mod=viewthread&tid=$thread[tid]&extra=$extra"
复制代码
改为:
- href="thread-{$thread[tid]}-1-1.html"
复制代码
带单引号的变量则用:
- href="thread-{$thread['tid']}-1-1.html"
复制代码
首页四格数据源(forum_index.php):
将:
- 'url' => 'forum.php?mod=viewthread&tid='.$ithread['tid'],
复制代码
改为:
- 'url' => 'thread-'.$ithread['tid'].'-1-1.html',
复制代码
「复制链接」伪静态化(viewthread.htm 第 222 行):
将:
- <a href="forum.php?mod=viewthread&tid=$_G[tid]$fromuid" onclick="return copyThreadUrl(this, '$_G[setting][bbname]')" {if $fromuid}title="{lang share_url_copy_comment}"{/if}>[{lang share_url_copy}]</a>
复制代码
改为:
- <a href="thread-{$_G[tid]}-1-1.html" onclick="return copyThreadUrl(this, '$_G[setting][bbname]')" {if $fromuid}title="{lang share_url_copy_comment}"{/if}>[{lang share_url_copy}]</a>
复制代码
关于 $fromuid 的取舍:
原代码中的 $fromuid 是访问推广参数(&fromuid=123)。伪静态化时有两种选择:
| 方案 | 写法 | 效果 | | 保留推广参数 | thread-{$_G[tid]}-1-1.html?fromuid={$_G[uid]} | 保留推广积分,但可能被恶意刷分 | | 去掉推广参数 | thread-{$_G[tid]}-1-1.html | 无推广参数,防止刷分 |
最终采用去掉 $fromuid 的方案,理由:
- fromuid 容易被恶意刷分(批量点击推广链接获取积分)
- 推广带来的收益 < 被刷分的风险
- 复制出的链接更简洁
3、最终实现效果
电脑版:
| 页面 | 改造前 | 改造后 | | 论坛首页 | 动态链接 | ✅ 伪静态 | | 版块列表 | 动态链接 | ✅ 伪静态 | | AJAX 翻页 | 动态链接 | ✅ 伪静态 | | 导读页 | 动态链接 | ✅ 伪静态 | | 面包屑导航 | 动态链接 | ✅ 伪静态 | | 推荐主题 | 动态链接 | ✅ 伪静态 | | TAG 聚合页 | 动态链接 | ✅ 伪静态 | | 排行榜 | 动态链接 | ✅ 伪静态 | | 首页四格幻灯片 | 动态链接 | ✅ 伪静态 | | 复制链接 | 动态链接 | ✅ 伪静态 |
手机版:
| 页面 | 改造前 | 改造后 | | 手机版首页 | 动态链接 | ✅ 伪静态 | | 手机版版块列表 | 动态链接 | ✅ 伪静态 | | 手机版导读列表 | 动态链接 | ✅ 伪静态 |
未处理项及原因:
| 项目 | 原因 | | 淘帖页(电脑版+手机版) | Discuz! 原生对游客输出伪静态 | | 用户空间 | 游客不可访问 | | 搜索结果 | 搜索引擎不索引 | | 商品交易页 | 特殊页面,无法用标准伪静态 | | 帖子页分页 | 携带筛选参数,伪静态无法完整承载 | | 管理页面 | 不参与 SEO | | 排行榜子页面 | 实测已是伪静态,无需处理 |
4、重要技术沉淀
需更新到固化摘要:
- 二十一、站内链接伪静态化改造(2026-09-14)
- 改造范围:所有游客可见、指向帖子内容页的链接(电脑版+手机版)
- 模板层替换规律:forum.php?mod=viewthread&tid=xxx → thread-xxx-1-1.html
- 数据源修复:forum_index.php 首页四格 slide 数据
- 复制链接修复:viewthread.htm 第 222 行,去掉 fromuid 参数
- 未处理项:淘帖(原生伪静态)、用户空间(游客不可见)、搜索结果(不索引)、排行榜子页(实测已静态)
- 模板缓存清理:rm -rf /www/wwwroot/www.dianbo.org/data/template/*
复制代码
踩坑点:
| 问题 | 正确做法 | | 花括号未加导致 PHP 语法错误 | 模板中使用 {$thread[tid]},避免 -1-1 被解析为减法 | | 首页四格幻灯片不生效 | 修改 forum_index.php 后需清除 cache_grids.php 缓存 | | 登录用户仍看到动态链接 | Discuz! 设计如此,登录用户走动态分支,游客和搜索引擎走伪静态 | | 测试时看到动态链接 | 必须用未登录浏览器 + 无痕模式测试 | | 排行榜子页面单独改无效 | 实测主模板已控制,子模板无需重复修改 | | 手机版遗漏 | 电脑版和手机版模板独立,需分别处理 | | 复制链接仍是动态 | copyThreadUrl 函数复制的是 obj.href,模板中需改为伪静态 | | fromuid 挂不上 | 伪静态 URL 后应跟 ?fromuid=xxx 而非 &fromuid=xxx,最终选择去掉 |
关于 Discuz! 伪静态机制的重要发现:
- Discuz! 的伪静态是登录状态感知的
- 游客和搜索引擎:输出伪静态链接
- 登录用户:输出动态链接(携带 ctid 等个性化参数)
- 但并非所有模块都自动处理,部分模板仍硬编码动态链接,需要手动改
- copyThreadUrl 函数:复制的是 <a> 标签的 href 属性,模板中直接改 href 即可
5、进一步优化的可能性
| 方向 | 说明 | 优先级 | | 服务器层 301 | 在 Nginx 加规则,动态 URL 永久 301 到静态 URL | 中 | | 清理备份文件 | 删除 forumdisplay_list-副本.htm 等无用文件 | 高 | | 观察收录情况 | 通过站长工具确认动态链接是否被正常替代 | 中 | | 检查低频页面 | 群组、空间等页面按需处理 | 低 |
|
|