相比于 DedeCMS 自带的搜索功能,百度站内搜索(即使用百度搜索的 API 来搜索你自己的网站)具有以下显著优势:

(图片来源网络,侵删)
- 搜索体验好:百度强大的搜索算法,能提供更相关、更智能的搜索结果。
- 性能优越:搜索请求由百度服务器处理,大大减轻了你自身服务器的压力。
- 功能丰富:支持搜索建议、拼写纠错、相关搜索等高级功能。
- 权重高:搜索结果直接来自百度,对 SEO 更友好。
第一步:准备工作 - 获取百度搜索的 API 权限
这是最关键的一步,没有 API 密钥,后续所有操作都无法进行。
-
登录百度智能云:
- 打开 百度智能云官网,并登录你的账号,如果没有,需要先注册一个。
-
进入“自然语言处理 NLP”:
- 在产品列表中找到并进入 “人工智能” > “自然语言处理”。
-
创建应用:
(图片来源网络,侵删)- 在 NLP 控制台页面,点击 “创建应用”。
- 填写应用信息:
- 应用名称:给你的应用起个名字,我的网站站内搜索”。
- 应用描述:简单描述一下应用用途,用于网站内容搜索”。
- 接口选择:必须勾选 “文本检索”,这是实现站内搜索的核心接口。
- 阅读并同意服务条款,然后点击 “立即创建”。
-
获取 API Key 和 Secret Key:
- 应用创建成功后,会跳转到应用详情页。
- 你可以看到你的 API Key 和 Secret Key,这两个字符串非常重要,请妥善保存,不要泄露。
第二步:修改 DedeCMS 搜索模板
我们需要修改 DedeCMS 的搜索页面模板,让搜索请求不再发送到本地,而是发送到百度的服务器。
-
找到搜索模板文件:
- 登录你的 DedeCMS 后台。
- 进入 “模板” > “模板管理” > “模板文件列表”。
- 在左侧选择你当前使用的模板目录。
- 找到并点击 “搜索模板” 文件夹,然后编辑
search.htm文件。
-
修改搜索表单:
(图片来源网络,侵删)- 在
search.htm文件中,找到搜索表单的<form>标签,它通常是这样的:<form name="formsearch" action="{dede:global.cfg_cmsurl/}/search.php" method="get"> - 我们需要将
action属性修改为百度的搜索 API 地址,并添加必要的参数。
- 在
-
编写新的搜索表单代码:
- 将原来的搜索表单替换为以下代码。请务必将
YOUR_API_KEY替换为你自己申请到的 API Key。
<form name="formsearch" action="https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/plugin/site_search?access_token=YOUR_ACCESS_TOKEN" method="post" target="_blank"> <div class="form-search"> <input type="text" name="query" id="keyword" class="input-text" placeholder="请输入关键词..." value="{dede:global name='keyword' function='RemoveXSS(@me)'/}"> <button type="submit" class="btn">搜索</button> </div> </form>代码解释:
action: 这是百度搜索 API 的地址,注意,这里我们使用的是wenxinworkshop(文心一言)的插件接口,这是目前官方推荐的用于站内搜索的接口。access_token: 这是访问 API 的凭证,但它不是你的API Key,而是通过API Key和Secret Key换取的,我们需要在页面加载时动态获取它。method="post": 百度站内搜索 API 要求使用 POST 方法提交数据。target="_blank": 可选,点击搜索后在新标签页打开结果。name="query": 这是关键! 搜索关键词的输入框name属性必须设置为query,百度 API 才能识别。value="{dede:global name='keyword'...}": 这行代码用于保留用户在搜索结果页再次搜索时已经输入的关键词。
- 将原来的搜索表单替换为以下代码。请务必将
第三步:动态获取 Access Token
access_token 有有效期(30 天),不能直接写在代码里,我们需要在页面加载时通过 JavaScript 动态获取它。
-
在
search.htm中添加 JavaScript 代码:- 在
search.htm文件的<head>标签内或<body>标签末尾的<script>标签内,添加以下 JavaScript 代码。同样,将YOUR_API_KEY和YOUR_SECRET_KEY替换成你自己的。
<script> // 在页面加载时执行 window.onload = function() { // 使用 async/await 处理异步请求 async function getAccessToken() { const apiKey = 'YOUR_API_KEY'; // 替换成你的 API Key const secretKey = 'YOUR_SECRET_KEY'; // 替换成你的 Secret Key const tokenUrl = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${apiKey}&client_secret=${secretKey}`; try { const response = await fetch(tokenUrl); const data = await response.json(); if (data.access_token) { // 获取到 token 后,将其放入表单的 action 中 const form = document.querySelector('form[name="formsearch"]'); form.action = `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/plugin/site_search?access_token=${data.access_token}`; } else { console.error('获取 Access Token 失败:', data.error_description); } } catch (error) { console.error('请求 Access Token 时发生错误:', error); } } // 调用函数获取 token getAccessToken(); }; </script> - 在
工作原理:
- 当用户打开搜索页面时,这段 JavaScript 代码会自动运行。
- 它会向百度服务器发送请求,用你的
API Key和Secret Key换取一个临时的access_token。 - 获取成功后,它会动态地将这个
token拼接到搜索表单的action地址中。 - 这样,当用户点击搜索按钮时,表单就会提交到正确且有效的百度 API 地址。
第四步:配置百度搜索后台(可选但推荐)
为了让百度更好地索引你的网站内容,你还可以:
-
提交网站到百度站长平台:
- 注册并登录 百度站长平台。
- 添加并验证你的网站。
- 在 “普通收录” 中,你可以提交网站的 URL,让百度更快地发现和收录你的内容。
-
配置“熊掌号”(如果还在使用):
熊掌号已停止新用户申请,但老用户仍可配置,它提供的数据标注等功能对搜索展示有帮助。
总结与排错
完成以上步骤后,你的 DedeCMS 百度站内搜索功能就可以正常使用了。
如果遇到问题,请检查以下几点:
- API Key 和 Secret Key 是否正确:确保没有复制错误,并且是同一个应用下的。
- Access Token 是否成功获取:打开浏览器开发者工具(F12),切换到 “Network”(网络)标签,刷新页面,看看是否有向
oauth/2.0/token发起的请求,以及响应内容是否包含access_token,如果没有,说明密钥可能有问题。 - 搜索请求是否成功发送:在开发者工具的 “Network” 标签中,搜索时应该能看到一个向
ai_custom/v1/.../site_search发起的POST请求,Payload(载荷)中有query字段和你的关键词,检查这个请求的响应状态码和内容。 - CORS 跨域问题:
getAccessToken的请求失败,可能是浏览器的跨域策略阻止了,但由于aip.baidubce.com是一个受信任的域名,通常不会出现此问题,如果出现,请检查服务器端是否有代理或防火墙设置。
通过以上步骤,你就可以为你的 DedeCMS 网站集成一个强大、稳定且用户体验优秀的百度站内搜索功能了。
