iKode Blog icon iKode Blog
返回文章列表

Article

SEO 边界检查器:把 robots 和 sitemap 变成一张可读地图

技术笔记2026年6月19日 09:101 min

SEO 不只是让页面被找到,也包括明确告诉爬虫哪些入口不应该被找到。

SEO 边界检查器关注的不是关键词分数,而是网站的公开边界。

这个博客同时存在公开文章、后台页面、管理 API、公开生活记录和私密预览。如果只检查 sitemap 里有没有链接,很容易忽略更重要的问题:后台有没有意外暴露,私密内容有没有进入索引,robots.txt 是否真的指向当前 sitemap。

工具加载当前站点的 /robots.txt/sitemap.xml,然后把文本解析成两组简单数据。robots 只提取这次检查关心的 DisallowSitemap,避免把展示层绑在原始字符串上。

export function parseRobotsTxt(content: string) {
  return content.split(/\r?\n/).reduce((result, line) => {
    const disallow = line.trim().match(/^disallow\s*:\s*(.+)$/i)
    const sitemap = line.trim().match(/^sitemap\s*:\s*(.+)$/i)

    if (disallow?.[1]) result.disallows.push(disallow[1].trim())
    if (sitemap?.[1]) result.sitemaps.push(sitemap[1].trim())
    return result
  }, { disallows: [], sitemaps: [] })
}

sitemap 中的 <loc> 会被提取并转换为路径,再按 Article、Life、Static、Admin、API 和 Other 分类。这里没有依赖浏览器 DOMParser,因为输入结构很小,纯函数在服务端渲染和单元测试环境里都更容易复用。

export function categorizeSitemapPath(path: string) {
  if (path === '/admin' || path.startsWith('/admin/')) return 'Admin'
  if (path === '/api' || path.startsWith('/api/')) return 'API'
  if (path === '/blog' || path.startsWith('/blog/')) return 'Article'
  if (path === '/life' || path.startsWith('/life/')) return 'Life'
  return ['/', '/lab', '/about', '/contact'].includes(path) ? 'Static' : 'Other'
}

最后,界面把规则组合成几个可以快速判断的检查项:/admin 是否被拦截、/api/admin 是否被拦截、robots 是否链接 sitemap、sitemap 是否混入后台入口、公开文章是否存在,以及私密样例是否被隐藏。

这类检查不能替代完整 SEO 审计,但很适合放在个人网站的日常维护里。它把两个平时只在部署后偶尔打开的文本文件,变成了一张随时可以刷新确认的边界地图。

可以在 SEO 边界检查器 查看当前站点的真实结果。

Comments

留言

需要 GitHub 登录。新评论会先进入待审核,别急,它只是先坐到门口等一会儿。

使用 GitHub 登录后可以评论。

已通过评论

0

还没有通过审核的评论。桌子很安静,第一杯茶还没端上来。