如何通过CMS配置禁止索引无实质内容的自动页面?
解读
面试官问的不是“robots.txt怎么写”,而是“在CMS里怎么配置”。国内主流CMS(WordPress、帝国、织梦、PHPCMS、Shopify、ShopEx、微盟、有赞、小鹅通等)都允许后台一键设置,但不同系统入口、粒度、生效方式差异大。考点有三:
- 能否快速定位“自动页面”——站内搜索页、筛选页、TAG页、404页、空分类、空标签、分页、评论分页、会员中心、购物车、订单页、日历归档、作者页、站内信、短链接跳转页等。
- 能否用CMS原生功能(而非改代码)完成“禁止索引”——即返回noindex或404,同时不阻塞抓取,避免“误伤”正常页面。
- 是否理解“无实质内容”的业务定义——不是“字数少”,而是“对用户无增益、对搜索无价值”,并能与产品、技术对齐规则,防止后续运营误生成。
知识点
-
国内常见CMS的noindex配置入口
WordPress:后台“设置-阅读”→“对搜索引擎的可见性”是全局开关;单页/分类/标签在“快速编辑”里可单独设noindex;插件RankMath、SEOPress、All in One SEO、Yoast SEO、百度官方插件“百度搜索推送”均支持“noindex”批量模板。
帝国CMS:栏目管理→选项→“栏目页/列表页/内容页”单独写<meta name=robots content=noindex>;系统参数→“关闭动态页面”可把/search/、/e/search/、/e/tags/直接返回404。
织梦DedeCMS:模板头部写入{dede:field name=’typeid’ runphp=yes}if(@me==”){echo ‘<meta name=robots content=noindex,nofollow>’;}{/dede:field};后台“系统-系统基本参数-核心设置”可关闭“使用TAG”。
PHPCMS:在phpcms/modules/content/index.php里判断分页号$page>1时输出noindex,但后台“模块-管理模型-字段”可勾选“列表页禁止索引”实现零代码。
Shopify:Online Store→Themes→Edit Code→theme.liquid头部加{% if request.page_type contains ‘search’ or request.page_type contains ‘404’ %}<meta name=”robots” content=”noindex”>{% endif %};后台“Preferences”→“Password protection”下方有“Hide from search engines”是全局noindex。
有赞/微盟/小鹅通:SAAS封闭系统,无FTP,只能在“SEO设置”里把“搜索页”“空分类页”开关设为“关闭”,系统会自动返回404并同步给百度小程序。 -
配置后必须验证
百度资源平台→Robots→“更新检测”看是否仍抓取;
抓取诊断→输入典型URL,看返回码与页面源码是否含noindex;
site:域名 inurl:search 看是否已清库;
日志里搜索Baiduspider是否仍返回200,防止“只加noindex不返回404”导致抓取预算浪费。 -
与产品、运营、开发的三方协同
产品:定义“无实质内容”阈值——例如列表页商品少于3个、文章少于1篇、TAG下无聚合摘要。
运营:禁止批量导入生成空分类;发布内容前检查TAG是否已存在。
开发:在模板层统一封装函数,如is_noindex_page(),避免运营误操作后需二次上线。
答案
以国内最常用场景举例,给面试官一个“可落地、可复用”的SOP:
- 先跑全站爬虫(Xenu、ScreamingFrog、神箭手、站长之家“全站体检”),导出“标题重复、内容空、字数<150”的URL列表,按规则归类到/search/、/tag/、/filter/、/page/、/author/、/date/、/cart/、/member/。
- 在CMS后台批量设置:
WordPress:装“百度搜索推送管理”插件,在“TDK优化-TAG页/搜索页”选择“不索引”,插件会自动写<meta name=robots content=noindex>并同步给百度小程序;同时“设置-阅读”里关闭“搜索引擎可见性”全局开关仅用于临时封站,日常禁止勾选。
帝国CMS:栏目管理→批量设置→“列表页模板”顶部加<!--*if empty($list) { echo '<meta name=robots content=noindex>'; } *-->;系统→“关闭全站搜索”开关打开,让/search/直接返回404。
织梦:后台“系统-SQL命令运行器”执行update dede_arctype set ishidden=1 where id in (select tid from dede_taglist group by tid having count(aid)=0),把空TAG对应的栏目设为隐藏,模板里再加判断。
Shopify:theme.liquid里用Liquid语法一次性写完,无需额外插件;配置后24小时去百度资源平台“快速收录”里主动推送404列表,加速清库。 - 配置完立刻验证:
百度资源平台→抓取诊断→输入3条典型URL,确认返回码200但源码含noindex;
日志里grep Baiduspider | grep search,看抓取量是否次日下降80%以上;
一周后site:域名 inurl:search 结果归零即合格。 - 建立长期监控:
每周跑一遍爬虫,发现新增空页自动通知运营;
把“空页生成”加入CMS发布流程的卡点,例如帝国CMS的“信息投稿”模块,当栏目下文章数为0时禁止前台生成静态页。
拓展思考
-
如果公司用的是自研CMS,没有后台开关,如何零代码实现?
在CDN层(阿里云全站加速、腾讯云EO、百度云加速)做“边缘函数”:匹配URL规则^/(search|tag|filter).*且响应体字节<800,则在边缘节点自动插入<meta name=robots content=noindex>,并缓存5分钟,开发成本1小时即可上线。 -
仅noindex不返回404,会不会浪费抓取预算?
百度官方文档明确:noindex页面仍会抓取,但频率极低;若列表页分页超过20页,建议第2页起直接返回404,减少蜘蛛循环。 -
空页被外链引用怎么办?
先做301到最相关分类;若外链域名质量低,可直接410删除,并在百度资源平台“外链分析”里拒绝该域名,避免权重反向污染。