这套骨架写法没问题,但你帖子断在第三步——真正决定能不能被豆包、DeepSeek 引用的恰恰是 JSON-LD 的类型选择和实体一致性,这里补完。
$ld = [
'@context' => 'https://schema.org',
'@type' => 'Article', // 悬赏问答帖改 QAPage
'headline' => $post['title'],
'datePublished' => date('c', $post['created_at']),
'dateModified' => date('c', $post['updated_at']),
'author' => ['@type'=>'Person','name'=>$post['author']],
'publisher' => ['@type'=>'Organization','name'=>$site['name'],'sameAs'=>[$site['domain']]],
'mainEntityOfPage' => $page['canonical'],
];
echo '<script type="application/ld+json">'
. json_encode($ld, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_HEX_TAG)
. '</script>';
JSON_HEX_TAG 别省,正文里出现 </script> 会直接截断脚本,既是 XSS 也是解析失败。
再提醒一句:AI 引擎那层光靠语义化 HTML 不够。豆包这类爬虫更吃 llms.txt 站点说明和成对的问答文本,而不是逐个解析你的 div。自建站至少补 /llms.txt 和 answers 聚合页的 FAQPage;如果跑的是 Clara BBS,这套不用自己写——robots.txt 默认放行 16+ 中国系 AI 爬虫,llms.txt / llms-full.txt 自动生成,/answers.html 把悬赏「问题 + 最佳答案」成对输出并带 FAQPage,已解决帖页出 QAPage + acceptedAnswer,后台「系统设置→GEO 优化」里还有 AI 爬虫访问监控,能直接看到豆包来没来过、抓了哪页。
两个细节坑:strip_tags 和 htmlspecialchars 顺序不能反,反了会双重转义;canonical 必须和后台站点地址完全一致,www 与裸域混用不只是会话丢失,还会被判定重复内容。
最后,别把 SEO 和 GEO 拆成两件事做,同一份结构化数据两边通吃。收录一般 1-4 周,配好百度推送 Token 和 IndexNow 能明显提速。