对于搜索引擎来说,URL不同则是不同的页面,而网站经常出现一个页面多个URL的情况,例如带index.html的主页、伪静态后仍然存在的动态地址、以及分页(例如:https://www.4xseo.com/page/2)。canonical标签就是起到一个告知搜索引擎首选URL的作用。避免搜索引擎判断为重复页面给网站“减分”
基本上博主也是代码小白,都是网上找的,这里贴出来一起交流
functions.php添加代码
- //完美的canonical
- remove_action( 'wp_head', 'rel_canonical' );
- function my_rel_canonical() {
- global $post;
- if (is_single() || is_page()) {
- echo "<link rel=\"canonical\" href=\"" . get_permalink( $post->ID ) . "\" />\n";
- }
- if (is_home() && is_paged()) {
- echo "<link rel=\"canonical\" href=\"".home_url("/")."\" />\n";
- }
- if (is_category() || is_category() && is_paged()) {
- echo "<link rel=\"canonical\" href=\"".get_category_link(get_query_var('cat'))."\" />\n";
- }
- if (is_tag() || is_tag() && is_paged()) {
- echo "<link rel=\"canonical\" href=\"".get_term_link(get_query_var('tag'), 'post_tag')."\" />\n";
- }
- if (is_search() || is_search() && is_paged()) {
- echo "<link rel=\"canonical\" href=\"".get_search_link(get_query_var('search'))."\" />\n";
- }
- if (is_author()) {
- echo "<link rel=\"canonical\" href=\"".get_option('home')."\" />\n";
- }
- if (is_date()) {
- echo "<link rel=\"canonical\" href=\"".get_option('home')."\" />\n";
- }
- }
- add_action('wp_head', 'my_rel_canonical');
思享目前就是用的这个代码,添加于fufunctions.php文件中即可
值得注意的是,以上代码主页的首选连接是带“/”的,如需去除,将home_url("/")中的“/”删除即可
除此之外,思享还搜集了两种修改方法
获取链接函数然后调用
首先在functions.php文件中添加分类目录分页链接获取函数,代码如下:
- /* wordpress中使用canonical标签
- function cx_archive_link( $paged = true ) {
- $link = false;
- if ( is_front_page() ) {
- $link = home_url( '/' );
- } else if ( is_home() && "page" == get_option('show_on_front') ) {
- $link = get_permalink( get_option( 'page_for_posts' ) );
- } else if ( is_tax() || is_tag() || is_category() ) {
- $term = get_queried_object();
- $link = get_term_link( $term, $term->taxonomy );
- } else if ( is_post_type_archive() ) {
- $link = get_post_type_archive_link( get_post_type() );
- } else if ( is_author() ) {
- $link = get_author_posts_url( get_query_var('author'), get_query_var('author_name') );
- } else if ( is_single() ) {
- $link = get_permalink( $id );
- } else if ( is_archive() ) {
- if ( is_date() ) {
- if ( is_day() ) {
- $link = get_day_link( get_query_var('year'), get_query_var('monthnum'), get_query_var('day') );
- } else if ( is_month() ) {
- $link = get_month_link( get_query_var('year'), get_query_var('monthnum') );
- } else if ( is_year() ) {
- $link = get_year_link( get_query_var('year') );
- }
- }
- }
- if ( $paged && $link && get_query_var('paged') > 1 ) {
- global $wp_rewrite;
- if ( !$wp_rewrite->using_permalinks() ) {
- $link = add_query_arg( 'paged', get_query_var('paged'), $link );
- } else {
- $link = user_trailingslashit( trailingslashit( $link ) . trailingslashit( $wp_rewrite->pagination_base ) . get_query_var('paged'), 'archive' );
- }
- }
- echo '<link rel="canonical" href="'.$link.'"/>';
- }
- add_action('wp_head', 'cx_archive_link');
然后打开主题的头部文件(一般情况下为header.php)在其中添加以下代码:
- <?php
- if(is_home()) { ?>
- <link rel="canonical" href="<?php echo v7v3_archive_link();?>"/>
- <?php } ?>
- <?php
- if(is_category()) { ?>
- <link rel="canonical" href="<?php echo v7v3_archive_link();?>"/>
- <?php } ?>
- <?php
- if(is_single()) { ?>
- <link rel="canonical" href="<?php the_permalink(); ?>"/>
- <?php }?>
- <?php
- if(is_tag()) { ?>
- <link rel="canonical" href="<?php echo v7v3_archive_link();?>"/>
- <?php }?>
这样就实现了在wordpress网站上添加了canonical标签,集中网站权重。
直接调用canonical标签
其实,在 WordPress 2.9 发布之后,WordPress 已经默认支持这一标签了,我们无需做任何动作,主题就支持这一标签。
如果我们要在文章也添加canonical标签,则在header.php中添加如下代码:
- <?php if(is_single()){?>
- <link rel="canonical" href="<?php echo get_permalink($post->ID);?>" />
- <?php } ?>
- <?php if(is_home()){?>
- <link rel="canonical" href="<?php echo esc_url( home_url( '/' ) ); ?>" />
- <?php } ?>
以上是文章页和主页的,其他页面只要相应添加即可。大概就是这么个意思,这种方式应该比较好,不过思享比较小白,找不到对应的函数,呜呜~
还要说明一下在 WordPress 的源文件 wp-includes/default-filters.php 中如下代码:
- add_action( 'wp_head', 'rel_canonical' );
rel_canonical()就是WordPress调用的函数,以此来输出 rel=”canonical” 标签的 HTML 代码的。 如果你还想使用以前自己的方法,那么你可以通过下面代码屏蔽掉它:
- remove_action( 'wp_head', 'rel_canonical' );
如果使用插件来输出 Canonical 标签,而又没有在 WordPress 中屏蔽默认的 filter 的话,则会输出重复的 Canonical 标签。