先给出判断:入口页正常只说明首页或栏目页这一条链路能跑通,深层链路失效通常发生在三处——动态路由的重写规则、模板渲染时对深层数据的查询、以及缓存层对带路径参数的响应处理。定位方法是拿一个具体失效URL,逐段剥离变量,看哪一段开始返回异常,再决定是改服务器配置、改主题模板还是改缓存策略。
入口页正常、深层页异常时,第一件事不是改配置,而是把“异常”拆成可核对的证据。用同一台服务器、同一时间段,分别请求首页、栏目页、一个具体文章页,记录三项:HTTP状态码、响应体开头若干字节、响应耗时量级。如果首页200而文章页404,问题在重写或固定链接;如果文章页200但正文为空,问题在模板查询或对象缓存;如果文章页返回200但内容是首页内容,问题在缓存键或回退逻辑。
这一步的动作是固定一个失效URL作为样本,后续所有对比都用它。结果会直接决定下一步:状态码类异常走服务器与重写方向,内容类异常走模板与缓存方向。两者不要同时改,否则无法归因。
这通常指向重写规则或服务器路径解析。先临时关闭固定链接重写,用带查询参数的默认形式访问同一篇内容,例如 ?p=123 这类形式。如果默认形式能正常打开,说明内容本身存在,断点在重写层;如果默认形式也失效,断点在数据层或模板层,与重写无关。
确认是重写层后,检查服务器配置里与WordPress相关的重写段落是否被其他规则提前截断,以及是否存在多层代理或CDN把深层路径改写。动作是逐层绕过:先直连源站IP加Host头请求,再经过CDN请求,对比两者结果。如果直连正常而经过CDN异常,断点在边缘层而非源站。
这指向模板渲染与数据查询。先停用对象缓存插件或清空缓存,再请求同一URL。如果内容恢复,断点在缓存键设计,尤其是带分类、标签、分页参数的深层路径容易被错误地命中入口页缓存。如果停缓存后仍为空,检查模板中主循环是否被自定义查询覆盖,以及该查询是否依赖了深层路径才有的参数。
动作是临时在模板中输出当前查询到的对象数量与类型,仅用于本地核对,确认后再移除。这个结果决定下一步:查询为空要回到数据与权限,查询有数据但未渲染要回到模板条件判断。
这些证据的作用是防止把缓存问题当成重写问题、把模板问题当成数据问题。每排除一种解释,剩余假设就少一个,下一步动作的范围也随之收窄。
假设某站点文章页正常,但文章分页的第三页之后返回入口页内容。按顺序做:先请求分页第二页与第三页,确认断点从哪一页开始;再关闭缓存重复请求,若第三页恢复正常,则断点在缓存对分页参数的键处理;若仍异常,检查重写规则是否对分页参数做了截断,再检查模板分页查询是否设了上限。这个顺序的价值在于,每一步的结果都会排除一类原因,而不是同时改动多个配置。
需要说明的是,站点地图存在或robots.txt允许抓取,都不能保证深层链路可用;它们只影响抓取许可,不修复服务器端路径解析。HTTPS同样不改变深层链路是否失效,它只覆盖传输层。
修复后不要只看入口页。用修复前的样本URL、同层级的另一个URL、以及带参数的同层级URL各请求一次,对比状态码与响应体是否一致。如果三者都正常,再抽样检查更深的层级。若只有样本URL恢复而同类URL仍异常,说明修复只覆盖了个例,应回到重写或缓存键的通用规则上继续处理,而不是逐个修补URL。
验证通过后再决定是否清理缓存、更新站点地图或提交重新抓取。这些动作属于后续步骤,不能替代对断点本身的确认。