本文约 4,833 字,预计阅读 13 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:想让内容出现在百度 App 的小程序结果里
做 WordPress 站的站长有时会收到这样的建议:把站点内容同步到百度智能小程序,就能在百度 App 的搜索结果里以小程序卡片形式展现,获得移动端流量。这个说法方向没错,但实现难度常被低估。智能小程序(smartprogram.baidu.com)是运行在百度 App 内的一套独立应用框架,用的是自己的模板语法与组件体系,和 WordPress 的主题系统没有任何兼容关系——不存在”装个插件就把站点变成小程序”这类一键方案。真正的打通只有两条路:一是 Web 化渲染,即在小程序里用 web-view 组件加载你的网页(但平台对 web-view 的使用有严格限制,且体验与原生组件差距明显);二是 API 同步,即 WordPress 提供内容接口,小程序端用原生组件渲染。前者简单但限制多,后者是主流但需要开发能力。本文讲第二条路的具体做法,以及它到底能带来什么、解决不了什么。
原理分析:两套体系,靠结构化数据连接
要理解打通的本质,先分清三件事。
| 层面 | WordPress Web 站 | 百度智能小程序 |
|---|---|---|
| 运行环境 | 浏览器 | 百度 App 内 |
| 渲染方式 | PHP 生成 HTML | 框架渲染(自有模板语法) |
| 收录体系 | 百度网页索引 | 小程序独立索引与分发 |
| 内容来源 | 数据库 | 可来自 API |
关键点在于:小程序的内容分发与网页收录是两套体系。小程序在百度搜索结果里展现,不代表你的 Web 页面收录会变好,两者不互相传导权重。所以做小程序的目标应该是”多一个移动端触点”,而不是”提升网站 SEO”。另外,小程序需要注册账号、选择类目、提交审核,内容类小程序还要求内容来源合规(有版权或原创),且页面不得存在诱导、虚假信息。这些限制决定了它适合有稳定内容产出与运营能力的站点,不适合作为”快速引流”的手段。技术上,打通的核心是让 WordPress 输出一份干净的、小程序端能直接渲染的结构化内容——通常是 JSON,字段稳定、图片地址可访问、正文是受控的 HTML 子集。
保姆级实操
步骤 1:注册智能小程序并确定类目
在百度智能小程序平台注册账号,选择主体类型(个人或企业),填写小程序名称与类目。内容类站点通常选择资讯/工具类目,类目必须与小程序实际内容一致,否则审核不通过。完成开发者资质后拿到 AppKey 等信息。
步骤 2:确认 WordPress REST API 可用
WordPress 自带的 REST API 默认在 /wp-json/wp/v2/posts 提供文章数据。先确认它没有被安全插件禁用、也没有被防火墙拦截。用浏览器访问该地址,能返回 JSON 即正常。默认字段往往不够用(缺缩略图、阅读量、正文清洗后的内容),需要自定义。
步骤 3:注册自定义接口,输出小程序友好的字段
用 register_rest_route 加一个精简接口,只返回小程序需要的字段,并对正文做清洗。下面这段代码放进主题的 functions.php:
add_action('rest_api_init', function () {
register_rest_route('mmf/v1', '/feed', [
'methods' => WP_REST_Server::READABLE,
'permission_callback' => '__return_true',
'args' => [
'page' => ['default' => 1, 'sanitize_callback' => 'absint'],
'per_page' => ['default' => 10, 'sanitize_callback' => 'absint'],
'cat' => ['default' => 0, 'sanitize_callback' => 'absint'],
],
'callback' => function (WP_REST_Request $req) {
$q = new WP_Query([
'post_type' => 'post',
'post_status' => 'publish',
'paged' => max(1, $req['page']),
'posts_per_page' => min(20, max(1, $req['per_page'])),
'cat' => $req['cat'] ?: '',
]);
$items = [];
foreach ($q->posts as $p) {
$content = apply_filters('the_content', $p->post_content);
// 去掉 script/style/iframe,保留小程序可渲染的标签
$content = preg_replace('#<(script|style|iframe)[^>]*>.*?</\1>#is', '', $content);
// 相对路径图片补全为绝对地址
$content = preg_replace_callback('/src="(\/[^"]+)"/i', function ($m) {
return 'src="' . home_url($m[1]) . '"';
}, $content);
$items[] = [
'id' => $p->ID,
'title' => get_the_title($p),
'excerpt' => wp_strip_all_tags(get_the_excerpt($p)),
'thumb' => get_the_post_thumbnail_url($p, 'medium') ?: '',
'date' => get_post_time('c', true, $p),
'author' => get_the_author_meta('display_name', $p->post_author),
'url' => get_permalink($p),
'content' => $content,
];
}
return [
'total' => (int) $q->found_posts,
'max_pages' => (int) $q->max_num_pages,
'page' => max(1, $req['page']),
'data' => $items,
];
},
]);
});
步骤 4:处理图片与资源访问
小程序端加载图片要求地址可访问且为 HTTPS,图片不能依赖 Referer 防盗链(否则小程序内加载失败)。对象存储或 CDN 上如果开了防盗链,需要把小程序域名的请求放行或关闭防盗链。正文里的大图建议限制宽度,避免小程序端加载过慢。
步骤 5:小程序端渲染与分页
小程序端按 page 与 per_page 做上拉加载,列表页用 excerpt 与 thumb,详情页渲染 content。正文 HTML 若包含小程序不支持的标签,需要在小程序端用富文本组件解析并做好白名单过滤,避免页面错版。
步骤 6:提交审核与后续维护
开发完成后在开发者工具里调试,提交审核时注意:小程序名称与类目一致、内容来源合规、无诱导分享与虚假宣传。上线后接口变更要保持向后兼容,避免小程序端大面积报错。
常见踩坑
- REST API 被安全插件关闭:很多”安全加固”插件默认禁用 REST API,接口 404 时先检查这里。
- 正文含 script/iframe 导致渲染失败:小程序富文本组件不支持这些标签,必须在接口侧清洗。
- 图片防盗链导致小程序内空白:对象存储 Referer 白名单要放行小程序请求来源。
- 接口返回全量正文导致慢:列表接口不要返回
content,只返回摘要,详情页再取全文。 - 类目与实际内容不符被拒审:工具站选了资讯类目、或资讯站选了电商类目,是审核失败高频原因。
- 期望小程序提升 Web 收录:两套索引体系,小程序做得好不会让网页排名变好。
- 案例:某技术博客用上面的接口方案把 800 篇文章同步进智能小程序,上线后小程序端列表加载正常,但详情页有大片空白。排查发现正文中大量代码块被富文本组件过滤,且图片走的是对象存储的 Referer 防盗链,小程序请求被拒。解决办法是在接口里把代码块转成带类名的
<pre><code>并在小程序端做等宽字体样式适配,同时在 CDN 侧放行小程序来源。整改后详情页渲染正常,小程序带来的日均访问约 200,但 Web 站的收录与排名没有因此变化——这正是两套体系的真实关系。
总结
智能小程序与 WordPress 打通,本质是用 REST API 做一次内容供给,适合”想在百度 App 内多一个触点”的站点,不适合指望它带动 Web 收录。判断要不要做,看三个条件:有稳定的原创内容产出、能承担小程序端开发与审核维护、以及移动端用户占比确实较高。行动清单:注册并确定合规类目 → 确认 REST API 可用 → 自定义精简接口并对正文做标签清洗与图片绝对化 → CDN 放行图片请求 → 小程序端列表/详情分页渲染 → 提交审核并保持接口兼容。内容层面的结构化标记可配合百度搜索开放平台结构化数据提交一起做;Web 侧的收录通道仍然是主力,参考熊掌号下线后的内容提交通道;内容本身的原创属性则是小程序审核的前提,见百度原创保护与原创声明机制。
