页面完全打不开
可能原因:先判断是单一站点还是整个网络都无法访问。
排查方法:打开两个无关且常用的网站进行对比;若都失败,优先检查本地网络、路由器或移动数据。若只有当前站点失败,再检查地址拼写、DNS、代理与服务器状态。
注意:不要连续安装所谓网络修复器。先改变一个条件并记录结果,能更快缩小问题范围。
故障排查
从网络、浏览器、资源路径到 PHP 与 SEO 输出,按现象逐项定位比一次修改很多设置更有效。以下每项都给出可能原因、排查动作和需要避免的误区。
可能原因:先判断是单一站点还是整个网络都无法访问。
排查方法:打开两个无关且常用的网站进行对比;若都失败,优先检查本地网络、路由器或移动数据。若只有当前站点失败,再检查地址拼写、DNS、代理与服务器状态。
注意:不要连续安装所谓网络修复器。先改变一个条件并记录结果,能更快缩小问题范围。
可能原因:HTML 已加载但 CSS 可能未成功获取,或浏览器仍在使用旧缓存。
排查方法:先强制刷新页面,再打开开发者工具查看样式文件是否返回 200。若资源正常但显示仍异常,可在隐私窗口对比,以排除旧缓存和扩展影响。
注意:如果只清缓存即可恢复,说明问题更可能在静态资源版本,而不是 PHP 页面本身。
可能原因:目标地址可能不存在、路径大小写不一致,或链接拼写错误。
排查方法:记录点击前后的完整路径,直接在地址栏打开目标地址。站内链接应当指向实际存在的 PHP 页面或资源,404 不应被自动重定向到首页掩盖。
注意:明确的 404 比错误跳首页更有利于用户判断发生了什么。
可能原因:重定向规则、HTTP/HTTPS 切换或代理配置可能形成循环。
排查方法:观察地址栏是否在两个地址之间切换;若有开发者工具,可查看网络面板中的 301/302 链。服务器规则中应避免同时存在互相矛盾的 www、HTTPS 或路径规范化设置。
注意:遇到跨陌生域名的连续跳转,应停止继续操作并重新核对来源。
可能原因:证书可能过期、域名不匹配,也可能是设备时间或网络拦截导致。
排查方法:先核对系统日期和时区,再尝试可信网络。若只有该域名报错,应检查服务器证书链与域名覆盖;若多个安全站点同时异常,设备或网络环境更值得排查。
注意:不要在证书警告未解决时输入密码或其他敏感信息。
可能原因:固定宽度元素、长链接或表格可能超出屏幕。
排查方法:检查是否有未设置 max-width 的图片、过宽表格、长不可断行字符串或绝对定位元素。响应式页面应允许内容重排,而不是只把桌面布局缩小。
注意:优先修复造成溢出的具体元素,不要简单给 body 加 overflow:hidden 掩盖问题。
可能原因:移动菜单脚本可能没有同步 aria 状态或缺少关闭逻辑。
排查方法:确认点击按钮会切换菜单类名与 aria-expanded;同时支持点击外部和 Escape 关闭。关闭后把焦点还给菜单按钮,可以避免键盘用户迷失。
注意:即使 JavaScript 失效,主要页面也应能通过正常链接访问。
可能原因:引用路径错误、文件尚未部署或大小写不一致都可能导致。
排查方法:检查 HTML 的 src 与服务器根目录文件名是否完全一致。Linux 主机通常区分大小写,hero.webp 与 Hero.webp 会被视为不同文件。
注意:固定资源池项目不要临时改文件名绕过问题,应统一部署实际资源。
可能原因:图片尺寸过大、网络较慢或服务器缓存设置不合理。
排查方法:先确认源图分辨率是否远高于实际展示尺寸,再检查静态资源缓存与压缩。WebP 已有较好压缩效率,但仍需要合适尺寸。
注意:不要为了速度把关键信息图片压缩到明显影响辨识的程度。
可能原因:系统字体栈会因操作系统不同而呈现略有差异。
排查方法:若项目禁止外链字体,可使用 system-ui 和常见本地中文字体,让 Windows、macOS 与移动系统选择本机可用字形。
注意:优先保证可读性和布局稳定,不需要追求所有设备逐像素一致。
可能原因:同一内容可能通过多个 URL、参数或路径访问。
排查方法:为希望索引的页面输出正确 canonical,并在 sitemap 中只列真实主地址。参数页若没有独立价值,可以 noindex 或避免提供可抓取入口。
注意:不要用 canonical 掩盖大量本可避免的重复页面,最好从信息架构和链接源头减少重复。
可能原因:公共 header 如果没有接收到页面级变量,就可能回退到默认标题。
排查方法:确保每个可索引内页在加载 header.php 前设置独立的 $pageTitle、$description、$keywords 与 $canonical。
注意:首页可使用固定默认 Title,但内页应准确描述当前主题。
可能原因:拼接基础域名或路径时可能出现双斜杠、缺协议或参数丢失。
排查方法:统一通过公共函数生成绝对 URL,并逐页查看最终 HTML 中的 link rel=canonical。动态内容页如果允许索引,参数也需要经过校验后稳定生成。
注意:不要把所有内页 canonical 都指向首页,这会模糊页面的独立主题。
可能原因:手工维护 sitemap 时容易遗留已删除地址。
排查方法:将 sitemap 中每个 URL 与实际文件逐一核对,并确认服务器能返回正常状态。没有可靠更新时间时不要伪造 lastmod。
注意:只收录希望被索引且真实可访问的地址,数量少但准确比大量无效 URL 更好。
可能原因:变量可能在 include 前未定义,或某个分支未赋值。
排查方法:对页面元数据提供公共回退值,对依赖页面的数据先判断类型与存在性;动态参数使用 filter_input 并验证。开发阶段开启错误显示有助于定位,生产环境则应记录而不是直接展示。
注意:不要用 @ 抑制错误,它会隐藏真正需要修复的问题。
可能原因:同一个 functions.php 被多次 require 或多个文件定义了同名函数。
排查方法:公共函数使用 require_once,并把通用函数集中到单一文件。若历史文件已有同名实现,应保留一处权威定义而不是复制。
注意:重复定义问题应从依赖结构解决,不建议到处加 function_exists 临时绕过。
可能原因:declare(strict_types=1) 必须位于 PHP 文件最前面的有效位置。
排查方法:确保文件在 <?php 后立即写 declare,前面不要有 BOM、HTML、空白输出或其他语句。
注意:UTF-8 无 BOM 更适合作为 PHP 源码保存格式。
可能原因:用户输入未经校验或输出未转义可能造成显示和安全问题。
排查方法:输入阶段验证期望格式,输出到 HTML 时统一使用 htmlspecialchars;不要把过滤和转义混成同一个步骤。
注意:校验解决“允许什么”,转义解决“如何安全显示”,两者职责不同。
可能原因:slug 可能包含非法字符,或者数据数组里没有匹配项。
排查方法:先使用正则限制为小写字母、数字和连字符,再在数据源中精确匹配。无结果时返回 HTTP 404,并提供继续浏览入口。
注意:不要把任意未知 slug 都回退到第一条内容,这会制造重复 URL。
可能原因:JavaScript 可能在目标元素不存在时直接访问属性。
排查方法:查询 DOM 后先判断元素是否存在,再绑定事件。脚本增强应围绕菜单等辅助交互,核心正文和主链接不要依赖 JS 才生成。
注意:一条前端报错不应让整个页面的导航与正文失效。
可能原因:异步属性、动态插入或分散到多个模板可能改变执行顺序。
排查方法:把固定脚本统一放在公共 header 的 head 结束前,并保持明确顺序;不要给需要顺序的脚本随意添加 async。
注意:通过单一公共模板维护比在每个页面复制脚本更容易保证一致。
可能原因:robots.txt 可能误屏蔽目录,或与页面 meta robots 表达冲突。
排查方法:先确认 robots.txt 只控制抓取,不等同于删除已索引内容。希望正常抓取的主页面应保持 Allow,并在需要时通过页面级 noindex 控制索引。
注意:不要根据 User-Agent 返回不同正文,避免产生不一致内容。
可能原因:sticky header 会占据固定高度,锚点跳转后可能被覆盖。
排查方法:可以设置 scroll-margin-top,或确保页面没有依赖大量锚点跳转。移动端 header 高度变化时也要测试。
注意:固定元素应服务导航,而不是持续占用过多可视区域。
可能原因:全局 outline:none 会让键盘用户失去位置感。
排查方法:使用 :focus-visible 提供明显轮廓,并测试菜单、链接、按钮、details 等交互是否能按 Tab 顺序操作。
注意:鼠标点击时不必一直显示焦点环,但键盘导航时必须可识别。
可能原因:CSS 动画或过渡没有响应 prefers-reduced-motion。
排查方法:通过媒体查询缩短或移除非必要动画,且不要把信息只放在动画过程中展示。
注意:减少动画不代表删掉内容和功能,只改变表现方式。