Functional Specification
本文档解释了 Yoast SEO 如何生成 llms.txt 文件。
Yoast SEO 的 llms.txt 功能有什么作用?
- 启用 llms.txt 功能将在您网站的根目录下创建一个 llms.txt 文件
- 该文件将通过计划任务每周更新一次
Yoast SEO 如何选择要包含在 llms.txt 文件中的内容?
文章/页面/自定义文章类型
- Yoast SEO 在 llms.txt 文件中包含最近更新的 5 篇文章/页面/自定义文章类型(文章仅在最近 12 个月内发布过才会被包含)
- 此逻辑包括优先考虑基石内容
- 对于页面,如果您在 llms.txt 设置中选择
手动选择页面,则可以覆盖此逻辑
- 如果在“搜索外观”设置中为特定自定义文章类型勾选了“在搜索结果中显示标签”框,则会包含自定义文章类型
分类/标签/自定义分类法术语
- Yoast SEO 包含关联内容最多的 5 个分类/标签
- 如果在“搜索外观”设置中为特定分类法勾选了“在搜索结果中显示术语”框,则会包含自定义分类法的术语
如何删除 llms.txt 文件?
- 您可能会看到 Yoast SEO 的警告,提示由于已存在 llms.txt 文件而无法自动生成
- 您需要从服务器中移除现有文件,Yoast SEO 才能自动生成它
如何创建自己的 llms.txt 文件?
- 禁用该功能
- 在您网站的根目录中创建一个 llms.txt 文件
- 遵循 https://llmstxt.org/ 以获取最佳实践
已知限制
- 当存在另一个 llms.txt 文件时,我们会确保不覆盖它。但如果某个插件动态提供 llms.txt 文件,我们的 txt 文件仍会被创建,并且由于它具有更高的优先级,它将在 example.com/llms.txt 这个 URL 中显示。
- 如果您在启用 llms.txt 功能的情况下停用 Yoast SEO,然后在某个时间点重新激活它,在激活后的接下来 5 分钟内,设置中的“查看 llms.txt 文件”按钮将指向一个 404 页面。
- 我们尚不支持包含特殊 Markdown 字符的 Markdown 代码块。目前这些字符将被转义。例如:
- 网站标语包含以下字符串:“This is `the *tagline`”
- llms.txt 将输出为:“This is \`the \*tagline\`“
过滤器
llms.txt 功能提供了几个可用的过滤器。
更改文件路径根目录的获取方式,以放置 llms.txt 文件
- llms.txt 文件使用
get_home_path()将 llms.txt 文件放置在 WordPress 安装的根目录。 - 如果该目录不可写,则使用
$_SERVER['DOCUMENT_ROOT'](如果可用)。 - 对于这两种方式都不起作用的情况,可以使用
wpseo_llmstxt_filesystem_path过滤器:
add_filter( 'wpseo_llmstxt_filesystem_path', 'custom_llmstxt_file_path' );
/**
* 使用 WP_CONTENT_DIR 常量来获取服务器的 Web 根目录,而不是默认方式。
*
* @return string 修改后的 Web 根目录。
*/
function custom_llmstxt_file_path() {
return dirname( WP_CONTENT_DIR );
}
编辑 llms.txt 文件中添加的 BOM 前缀
- 出于编码目的,我们在 llms.txt 文件前添加了 UTF-8 的字节顺序标记 (BOM) (
"\xEF\xBB\xBF")。 - 如需将 BOM 更改为其他编码或完全移除,可以使用
wpseo_llmstxt_encoding_prefix过滤器:
add_filter( 'wpseo_llmstxt_encoding_prefix', 'custom_llmstxt_encoding_prefix' );
/**
* 从 llms.txt 文件中移除 UTF-8 BOM 前缀并添加 UTF-16 BOM 前缀。
*
* @return string 编辑后的前缀。
*/
function custom_llmstxt_encoding_prefix() {
return "\xFF\xFE";
}
- 如需完全移除编码前缀,可以使用相同的过滤器:
add_filter( 'wpseo_llmstxt_encoding_prefix', 'custom_llmstxt_encoding_prefix' );
/**
* 从 llms.txt 文件中移除 UTF-8 BOM 前缀。
*
* @return string 被移除的前缀。
*/
function custom_llmstxt_encoding_prefix() {
return "";
}
Edit the description in the posts lists
- By default, for posts that have a custom excerpt, we use that to add a description for each post:
## Posts
- [Post with excerpt](http://example.com/post-with-excerpt/): This is a custom excerpt.
- [Post without excerpt](http://example.com/post-without-excerpt/)
- For changing the default behavior, you can use the
wpseo_llmstxt_link_descriptionfilter:
<?php
/**
* Changes the link description in the llms.txt file.
*
* @param string $link_description The description of the link.
* @param string $post_id The ID of the post that is being added as a link.
* @param string $post_type The post type of the post that is being added as a link.
*
* @return string The changed link description in the llms.txt file.
*/
function set_custom_llmstxt_link_description( $link_description, $post_id, $post_type ) {
// Remove excerpt for specific post types.
if ( in_array( $post_type, [ 'page' ], true ) ) {
return '';
}
// Keep excerpt for other post types but make it more descriptive.
return 'Custom description for post ID ' . $post_id . ', ' . $link_description;
}
add_filter( 'wpseo_llmstxt_link_description', 'set_custom_llmstxt_link_description', 10, 3 );
- The above snippet will remove descriptions from pages (if there are any) and adjust accordingly the descriptions for posts:
## Pages
- [Page with excerpt](http://example.com/page-with-excerpt/)
## Posts
- [Post with excerpt](http://example.com/post-1): Custom description for post ID 1, this is the custom excerpt.