新闻、案例和活动详情页通常由内容接口提供数据。把页面做成 SSR 只是起点:搜索引擎还需要稳定的 URL、正确的错误状态、完整的元信息,以及只包含公开内容的站点地图。
详情页根据路由参数取得内容,并在服务端等待结果后再渲染标题、摘要和正文。若请求放在 onMounted,首个 HTML 只有空壳,爬虫和分享预览未必会等待浏览器执行后续请求。
区分两种失败:内容确实不存在时返回 404;内容服务暂时出错时返回 502 或其他合适的服务错误。把所有失败都变成 404,可能让搜索引擎误以为已发布的文章被永久删除。页面组件负责展示,接口层负责把后端响应转换成明确的成功或失败结果。
文章详情的 canonical URL 应由站点公开地址和编码后的 slug 构成,不依赖当前请求里的 Host。页面标题、描述、Open Graph 图片和结构化数据都使用这篇文章的实际内容。图片地址如果来自资源服务,应在生成元信息前解析成浏览器可访问的绝对地址。
结构化数据可以使用 NewsArticle,但发布日期必须来自真实数据,不能用页面渲染时间冒充发布日期。将 JSON 放入 HTML 脚本标签时还要安全序列化,例如转义 <,避免内容字段意外结束脚本标签。正文如果以 HTML 返回,必须确认服务端已经按允许列表过滤危险标签与属性;v-html 本身不会替内容消毒。
“有预览链接”与“允许被搜索”是不同的状态。预发布详情可以显示预览标识,同时设置 noindex, nofollow。公开列表和站点地图只使用后端明确标记为已发布的内容,不能把所有可访问的 slug 都视为公开文章。
站点地图应遍历分页结果,否则内容数量超过第一页时,后续文章不会被发现。输出 XML 前要转义 &、< 等字符;对站点地图设置短时间缓存可以减少内容服务压力。若内容服务不可用,返回仅含稳定入口的站点地图是一种降级方案,但需监控抓取和接口错误,不能让长期缺失的文章悄悄变成常态。
noindex,且不出现在公开列表和站点地图中。