17713433920 info@mac163.com

我们有两个博客可用于开发人员相关内容,这两个博客是我的个人博客,而WebDesires博客是我的个人博客,它是“ deano.me” 。问题在于,有时帖子与网站有关,并且任何知道Google的人及其重复的内容政策都知道错误地执行此操作有多严重。

对于那些不知道rel =“ canonical”的人可以用于重复内容,例如,假设我们有一个Blog A和Blog B,Blog A创建了一个帖子,现在Blog B想分享相同的帖子(如果您不愿意) =“ canonical”到Blog A的Blob B页面Google会认识到您正在共享Blog B上Blog A的内容,并将所有功劳归于Blog A,更重要的是,它不会将Blog B的帖子归类为重复内容,并且在在某种程度上,博客B仍然可以享受排名优势。

但是,在WordPress中,这不是标准功能,无法轻松更改Canonical-但是可以完成,这里是方法。

覆盖规范的代码

要允许覆盖WordPress中的规范,您首先需要在/wp-content/themes/[your-theme]/中的主题函数functions.php文件的底部粘贴以下代码片段:

//Custom Canonical
// A copy of rel_canonical but to allow an override on a custom tag
function rel_canonical_with_custom_tag_override()
{
global $wp_the_query;
if( !is_singular() ) {
$link = get_canonical_url();
} else if( !$id = $wp_the_query->get_queried_object_id() ) {
$link = get_canonical_url();
} else {
// remove the default WordPress canonical URL function
//remove_action( 'su_head', 'link_rel_canonical_tag' );
// check whether the current post has content in the "canonical_url" custom field
$canonical_url = get_post_meta( $id, 'canonical', true );
if( '' != $canonical_url )
{
// trailing slash functions copied from http://core.trac.wordpress.org/attachment/ticket/18660/canonical.6.patch
$link = user_trailingslashit( trailingslashit( $canonical_url ) );
}
else
{
$link = get_canonical_url();
}
}
remove_action( 'wp_head', 'rel_canonical' );
echo "<link rel='canonical' href='" . esc_url( $link ) . "' />\n";
}
function get_canonical_url() {
global $wp_query, $wp_rewrite;
//404s and search results don't have canonical URLs
if ($wp_query->is_404 || $wp_query->is_search) return false;
//Are there posts in the current Loop?
$haspost = count($wp_query->posts) > 0;
//Handling special case with '?m=yyyymmddHHMMSS'.
if (get_query_var('m')) {
$m = preg_replace('/[^0-9]/', '', get_query_var('m'));
switch (strlen($m)) {
case 4: // Yearly
$link = get_year_link($m);
break;
case 6: // Monthly
$link = get_month_link(substr($m, 0, 4), substr($m, 4, 2));
break;
case 8: // Daily
$link = get_day_link(substr($m, 0, 4), substr($m, 4, 2),
substr($m, 6, 2));
break;
default:
//Since there is no code for producing canonical archive links for is_time, we will give up and not try to produce a link.
return false;
}
//Posts and pages
} elseif (($wp_query->is_single || $wp_query->is_page) && $haspost) {
$post = $wp_query->posts[0];
$link = get_permalink($post->ID);
if (is_front_page()) $link = trailingslashit($link);
//Author archives
} elseif ($wp_query->is_author && $haspost) {
$author = get_userdata(get_query_var('author'));
if ($author === false) return false;
$link = get_author_posts_url($author->ID, $author->user_nicename);
//Category archives
} elseif ($wp_query->is_category && $haspost) {
$link = get_category_link(get_query_var('cat'));
//Tag archives
} else if ($wp_query->is_tag && $haspost) {
$tag = get_term_by('slug',get_query_var('tag'),'post_tag');
if (!empty($tag->term_id)) $link = get_tag_link($tag->term_id);
//Day archives
} elseif ($wp_query->is_day && $haspost) {
$link = get_day_link(get_query_var('year'),
get_query_var('monthnum'),
get_query_var('day'));
//Month archives
} elseif ($wp_query->is_month && $haspost) {
$link = get_month_link(get_query_var('year'),
get_query_var('monthnum'));
//Year archives
} elseif ($wp_query->is_year && $haspost) {
$link = get_year_link(get_query_var('year'));
//Homepage
} elseif ($wp_query->is_home) {
if ((get_option('show_on_front') == 'page') && ($pageid = get_option('page_for_posts')))
$link = trailingslashit(get_permalink($pageid));
else
$link = trailingslashit(get_option('home'));
//Other
} else
return false;
//Handle pagination
$page = get_query_var('paged');
if ($page && $page > 1) {
if ($wp_rewrite->using_permalinks()) {
$link = trailingslashit($link) ."page/$page";
$link = user_trailingslashit($link, 'paged');
} else {
$link = esc_url( add_query_arg( 'paged', $page, $link ) );
}
}
//Handle protocol change
//if ($scheme = $this->get_setting('canonical_url_scheme', 'http'))
$scheme = 'http';
$link = preg_replace('@^https?://@', "$scheme://", $link);
//Return the canonical URL
return $link;
}
// replace the default WordPress canonical URL function with your own
add_action( 'su_head', 'rel_canonical_with_custom_tag_override',1 );

如何覆盖规范

当您将希望Canonical的任何帖子写到另一页时,只需添加一个名称为“ canonical”和所需URL值的“ custom field”,然后canonical就会被覆盖为您插入的值。但是,如果您不添加规范的自定义字段,则会生成一个默认的自定义字段,该字段将链接回它应做的相同内容。


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部