3个代码技巧搞定wordpress搜索排除,选哪家好看这篇
3个代码技巧搞定wordpress搜索排除,选哪家好看这篇
自己不会代码想做网站,选哪家好成了新手最大的焦虑。很多人觉得 WordPress 是傻瓜式建站,其实底层逻辑全是代码逻辑。
特别是搜索功能,默认会抓取全站内容,包括后台、标签页、甚至隐藏的草稿。
这会导致搜索结果杂乱,用户体验极差,百度收录也受影响。
很多新手不知道,WordPress 搜索排除并不是一个开关,而是一套逻辑组合。
今天不聊虚的,直接拆解怎么通过代码和插件,精准控制搜索范围。
搜索底层逻辑与常见误区
很多站长以为 WordPress 的搜索只是简单的 LIKE %keyword% 查询,其实不然。
WordPress 使用 WP_Query 类来处理搜索请求,默认参数非常宽泛。
默认情况下,它会搜索 post(文章)、page(页面),甚至包括自定义文章类型(CPT)。
如果你的站点有产品库、案例展示等 CPT,这些内容也会出现在搜索结果里。
更麻烦的是,它还会搜索 attachment(媒体文件)的标题和描述。
这就导致用户搜一个词,出来的结果里混着一堆图片、页面和无关文章。
对于企业站来说,这简直是灾难。客户想搜“报价”,结果搜出来一堆“联系我们”的页面。
很多新手问:为什么我用了插件还是搜出来无关内容?
因为大多数插件只能排除特定的文章类型,无法排除搜索框本身的逻辑漏洞。
比如,有些插件只能排除 page,但你的 CPT 叫 portfolio,它就不管用了。
还有一种情况是,搜索不仅搜正文,还搜 post_title(标题)。
如果你的文章标题里有“WordPress”这个词,但正文没提,它也会被搜出来。
这就是为什么你需要手动干预搜索逻辑,而不是依赖默认行为。
据阿里云官方文档关于 Web 应用优化的建议,前端请求的精准度直接影响服务器负载。
无意义的宽泛搜索,会消耗大量数据库查询资源,导致站点变慢。
所以,做 wordpress 搜索排除,不只是为了好看,更是为了性能。
很多新手选建站公司,问哪家好,其实就是在问谁懂这些底层细节。
很多小团队只会装主题,不会改核心查询逻辑。
他们给你的网站,搜索一乱,你就得找他们改,改一次收一次钱。
真正专业的团队,会在建站初期就规划好搜索策略。
比如,明确哪些内容需要被搜索,哪些需要被排除。
这需要在开发阶段就介入,而不是上线后打补丁。
关键词策略与内容分类
在做 wordpress 搜索排除之前,先想清楚你的内容结构。
不同类型的网站,搜索需求完全不同。
企业官网,核心搜索需求是“服务”和“案例”。
电商网站,核心搜索需求是“产品”和“品牌”。
新闻站点,核心搜索需求是“事件”和“人物”。
你的搜索排除策略,必须围绕核心需求来定。
比如,企业官网,你可能只想让用户搜到“服务页面”和“新闻文章”。
而“关于我们”、“隐私政策”、“招聘”这些页面,应该被排除在搜索之外。
否则,用户搜“服务”,结果出来一堆“隐私政策”,体验极差。
这里有一个常见的误区:把所有非文章类型都排除。
其实,有些页面是重要的。比如“联系我们”,用户可能想搜这个。
所以,排除策略应该是“白名单”机制,而不是“黑名单”机制。
即:只允许特定内容被搜索,其他全部排除。
这在代码实现上更清晰,也更容易维护。
下面是一个典型的关键词分析表,帮助你规划搜索范围:
| 内容类型 | 是否纳入搜索 | 理由 | 排除方式 |
|---|---|---|---|
| 文章 (Post) | 是 | 核心内容,包含大量关键词 | 保留 |
| 页面 (Page) | 部分 | 仅保留服务、联系页,排除政策页 | 代码排除指定 ID |
| 产品 (CPT) | 是 | 电商核心,需被用户找到 | 保留 |
| 案例 (CPT) | 是 | 展示实力,需被搜索 | 保留 |
| 附件 (Attachment) | 否 | 文件名混乱,无实际搜索价值 | 代码排除 |
| 草稿/密码保护 | 否 | 未公开内容,不应被搜出 | 默认排除,需二次检查 |
很多新手问:为什么我排除了页面,还是搜得到?
因为 WordPress 的搜索默认会匹配 post_title 和 post_content。
如果你只是排除了页面类型,但某些页面的标题恰好包含关键词,它还是会被搜出来吗?
不,如果你排除了页面类型,它就不会去查页面表。
但如果你是用插件排除的,有些插件只是在前端过滤,后端还是查了。
这就导致了性能浪费。
所以,最好的方式是从数据库查询层面就排除。
这也涉及到一个技术点:pre_get_posts 钩子。
这个钩子允许你在查询执行之前,修改查询参数。
这是做 wordpress 搜索排除最核心的技术点。
站内优化实操与代码示例
既然懂了原理,现在动手写代码。
注意:以下代码建议放在子主题的 functions.php 文件中,或者通过 Code Snippets 插件添加。
直接改核心文件,升级主题后会丢失,这是大忌。
第一步:排除媒体附件搜索
默认情况下,WordPress 会搜索媒体库里的文件名和替代文本。
这些内容通常没有搜索价值,还会拖慢速度。
代码如下:
function exclude_attachments_from_search( $query ) {if ( $query->is_search() && ! $query->is_admin() ) {$query->set( 'post_type', array( 'post', 'page' ) ); // 只搜文章和页面// 如果只有文章和自定义类型,这里要对应修改}
}
add_action( 'pre_get_posts', 'exclude_attachments_from_search' );
这段代码的逻辑是:如果是搜索请求,且不在后台,就把查询的文章类型强制设为 post 和 page。
这样,媒体附件、自定义类型就被排除了。
如果你的网站有产品 CPT,比如叫 product,你需要把它加进去:
$query->set( 'post_type', array( 'post', 'page', 'product' ) );
第二步:排除特定页面
有时候,你不想让“隐私政策”或“服务条款”被搜到。
你可以指定页面 ID 来排除。
假设“隐私政策”的 ID 是 123,代码如下:
function exclude_specific_pages_from_search( $query ) {if ( $query->is_search() && ! $query->is_admin() ) {// 获取要排除的页面 ID$excluded_ids = array( 123, 456, 789 ); // 替换为你的页面 ID// 使用 meta_query 或者 post__not_in 来排除// 注意:post__not_in 只能排除 ID,不能排除类型// 更稳妥的方式是结合 post_type 和 post__not_in$query->set( 'post__not_in', $excluded_ids );}
}
add_action( 'pre_get_posts', 'exclude_specific_pages_from_search' );
这里有个坑:post__not_in 是全局排除,不仅排除搜索,也排除其他地方。
如果只想在搜索时排除,必须加 is_search() 判断,上面的代码已经做了。
但更精准的方式,是利用 meta_query 或 tax_query。
不过对于新手,post__not_in 最简单直接。
第三步:排除标题搜索,只搜正文
有些网站希望,用户只能搜到正文里包含关键词的文章,标题里包含的不算。
这可以减少一些噪音,比如标题党。
WordPress 默认搜索标题和正文。
要只搜正文,需要修改 SQL 查询,比较复杂。
更简单的方案是,使用插件如 "Search by Relevance" 或 "Relevanssi"。
Relevanssi 是一个强大的搜索插件,它允许你自定义搜索字段。
安装 Relevanssi 后,你可以在后台设置:
- 勾选 "Search in title" 取消。
- 勾选 "Search in content" 保留。
- 设置权重:标题权重为 0,正文权重为 1。
这样,标题里的关键词就不会影响搜索排序和结果。
对于新手,用插件比写代码安全。
但如果你追求极致性能,还是建议用原生代码。
第四步:排除未发布内容
WordPress 默认不搜索未发布内容,但有些插件或自定义代码可能会破坏这个逻辑。
确保你的代码里没有强行查询 publish 以外的状态。
默认查询状态就是 publish,所以通常不需要额外操作。
但如果你用了自定义文章类型,且状态设置了其他值,要注意。
外链建设与推广策略
搜索排除做得好,用户体验提升,间接有助于外链建设。
用户搜得到想要的,才会愿意分享你的链接。
反之,搜索体验差,用户直接关页面,哪来的外链?
做外链时,也要注意搜索逻辑。
比如,你做了一个关于“WordPress 搜索优化”的文章。
这篇文章应该被搜索到,它是你的核心内容。
但你的“友情链接”页面,不应该被搜索到。
因为用户搜“友情链接”没有意义,还会占用搜索结果位置。
所以,在规划外链时,也要考虑这些页面是否需要被搜索。
通常,导航页、侧边栏链接、页脚链接,都不需要被搜索。
你可以通过 robots.txt 禁止爬虫抓取这些页面的搜索索引,但要注意,robots.txt 只是禁止爬虫,不影响用户在前端搜索。
用户在前端搜索,还是走数据库查询。
所以,robots.txt 对 wordpress 搜索排除没用。
必须靠代码或插件。
另外,做好 301 重定向。
如果你把一些旧的、无用的页面删除了,要设置重定向到首页或相关页面。
这样,搜索引擎不会报错,用户也不会遇到 404。
这虽然不直接是搜索排除,但属于站内优化的范畴。
很多新手问:为什么我的网站被降权了?
除了内容质量,搜索体验差也是原因之一。
百度和 Google 都会评估网站的“可用性”。
如果用户搜索体验极差,跳出率高,停留时间短,权重自然下降。
所以,做好 wordpress 搜索排除,是提升权重的小技巧,别小看它。
效果监测与调优
代码改完,别就完了。
要测试,要监测。
测试方法
- 前端测试:在搜索框输入常见关键词,检查结果是否只包含你希望的内容。
- 极端测试:输入一个只存在于被排除页面标题的词,看是否搜得出来。
- 性能测试:使用 Query Monitor 插件,查看搜索请求的 SQL 语句。
如果 SQL 语句里还查了 wp_posts 的所有类型,说明排除没生效。
正确的 SQL 应该只查特定的 post_type。
数据监测
使用 Google Analytics 或百度统计,监测搜索行为。
看用户搜什么词,结果页的点击率如何。
如果某个关键词的点击率很低,说明搜索结果不相关。
这时候,回去检查你的搜索排除逻辑。
是不是排除了太多,导致结果太少?
或者没排除够,导致结果太杂?
这是一个动态调整的过程。
没有一劳永逸的方案,要根据用户行为数据来调优。
常见违规问题
在 SEO 优化中,有些操作是违规的。
比如,通过 JS 隐藏搜索结果,但后端还是返回了。
这叫“欺骗搜索引擎”,会被惩罚。
wordpress 搜索排除必须是服务端逻辑,即数据库层面就不返回这些数据。
前端过滤不算数,搜索引擎能看穿。
所以,坚持用 pre_get_posts 等后端钩子,是最安全的方式。
报名材料与准备
这里插一句,如果你是为某个 SEO 比赛或认证做准备,报名材料里通常要提交:
- 网站 URL。
- 搜索功能演示视频。
- 技术实现说明(代码片段)。
- 效果对比数据(优化前后的截图)。
阿里云官方文档中提到的 Web 应用性能优化标准,也可以作为你技术方案的参考依据。
引用权威文档,能提升你方案的专业度。
很多新手觉得,SEO 就是堆关键词。
其实,SEO 是技术、内容、体验的综合体。
wordpress 搜索排除,就是技术层面的一个细节。
做好了,你的网站在同行中脱颖而出。
总结与互动
做 wordpress 搜索排除,核心是理解 WP_Query 和 pre_get_posts。
不要依赖插件,插件可能有 bug,且性能不如原生代码。
但如果你真的不会代码,选一家懂技术的建站公司,问哪家好,就选那些能给你看代码逻辑的。
不要选那些只给你看界面的。
界面好看,底层烂,后期维护成本极高。
你踩过哪些建站的坑?评论区交流,看看大家是怎么解决搜索混乱问题的。
