在WordPress中添加文章(Article)和面包屑导航(BreadcrumbList)的结构化数据(JSON-LD)不仅有助于搜索引擎更好地理解你的内容,还可以提升用户体验和SEO效果。

添加文章(Article)和面包屑导航(BreadcrumbList)的结构化数据(JSON-LD)

结构化数据提供了关于文章和网站结构的详细信息,帮助搜索引擎更好地理解内容的主题、作者、发布时间等。

面包屑导航的结构化数据可以出现在搜索结果中,访客能够了解网站的层级结构,提高点击率,更好的点击率可以间接提升网站在搜索引擎中的排名。

添加方法

复制以下代码到 WordPress 主题的 functions.php 文件中。

//结构化
function add_schema_tags() {
if ( is_single() ) { // 只在单篇文章页面添加
$post_id = get_the_ID();
$post_date = get_the_date('c', $post_id); // 获取文章发布时间,格式为ISO 8601
$modified_date = get_the_modified_date('c', $post_id); // 获取文章最后修改时间,格式为ISO 8601
$post_title = get_the_title($post_id); // 获取文章标题
$post_url = get_permalink($post_id); // 获取文章URL
$post_image = get_the_post_thumbnail_url($post_id, 'full'); // 获取文章特色图片URL
$post_images = get_post_meta($post_id, '_post_images', true); // 获取文章多张图片(假设存储在自定义字段中)
$post_description = get_the_excerpt($post_id); // 获取文章摘要
$author = get_the_author_meta('display_name', get_post_field('post_author', $post_id)); // 获取文章作者名称
$author_url = get_author_posts_url(get_post_field('post_author', $post_id)); // 获取文章作者URL
$author_image = get_avatar_url(get_post_field('post_author', $post_id), array('size' => 96)); // 获取文章作者头像URL

if (empty($post_images)) {
$post_images = array($post_image);
}

// Article 结构化数据
$article_schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'@id' => $post_url,
'url' => $post_url,
'headline' => $post_title,
'image' => $post_images,
'description' => $post_description,
'datePublished' => $post_date,
'dateModified' => $modified_date,
'author' => array(
'@type' => 'Person',
'name' => $author,
'url' => $author_url,
'image' => $author_image
)
);

// 获取文章所属的所有分类及其父分类
$categories = get_the_category($post_id);
$category_breadcrumbs = array();

foreach ($categories as $category) {
$category_breadcrumbs = array_merge($category_breadcrumbs, get_category_breadcrumbs($category));
}

// 去重并排序
$category_breadcrumbs = array_unique($category_breadcrumbs, SORT_REGULAR);
usort($category_breadcrumbs, function($a, $b) {
return $a['position'] - $b['position'];
});

// BreadcrumbList 结构化数据
$breadcrumb_schema = array(
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => array(
array(
'@type' => 'ListItem',
'position' => 1,
'name' => '首页',
'item' => home_url('/')
)
)
);

// 添加分类面包屑
$position = 2;
foreach ($category_breadcrumbs as $breadcrumb) {
$breadcrumb['position'] = $position++;
$breadcrumb_schema['itemListElement'][] = $breadcrumb;
}

// 添加文章面包屑
$breadcrumb_schema['itemListElement'][] = array(
'@type' => 'ListItem',
'position' => $position,
'name' => $post_title,
'item' => $post_url
);

// 将数组转换为JSON字符串
$article_json_ld = json_encode($article_schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
$breadcrumb_json_ld = json_encode($breadcrumb_schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);

// 输出Article和BreadcrumbList JSON-LD脚本
echo '<script type="application/ld+json">' . $article_json_ld . '</script>' . "\n";
echo '<script type="application/ld+json">' . $breadcrumb_json_ld . '</script>' . "\n";
}
}

function get_category_breadcrumbs($category, $position = 2) {
$breadcrumbs = array();

if ($category->parent > 0) {
$parent = get_category($category->parent);
$breadcrumbs = array_merge($breadcrumbs, get_category_breadcrumbs($parent, $position));
$position = end($breadcrumbs)['position'] + 1;
}

$breadcrumbs[] = array(
'@type' => 'ListItem',
'position' => $position,
'name' => $category->name,
'item' => get_category_link($category->term_id)
);

return $breadcrumbs;
}

add_action('wp_head', 'add_schema_tags');

推荐使用子主题或者 WordPress 自建插件的方式添加,可以有效避免主题升级后自定义代码丢失。

声明:本文由 秋光暖暖 收集整理并发布,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。