一般来说,WordPress head标签默认是指系统WP_uhead()函数,加载更多的元标签和链接,比如WP版本号、上一篇和下一篇文章的链接等元元素。有些元素本身对网站优化没有实际影响,那么我们就来说说WordPress是如何在白天去除标题中多余的元标签的。
一般来说,WordPress head标签默认是指系统WP_uhead()函数,加载更多的元标签和链接,比如WP版本号、上一篇和下一篇文章的链接等元元素。有些元素本身对网站优化没有实际影响,那么我们就来说说WordPress是如何在白天去除标题中多余的元标签的。
WordPress从标题中移除冗余的元标签。
1.移除方法的详细说明。
在主题目录中找到functions.php文件,并在文件末尾添加以下代码以删除冗余标签和元素。
注意:请根据实际情况选择要删除的项目。
1.删除WordPress版本信息。
WordPress自动添加版本号信息。在头部区域,您可以看到:
<meta name="generator" content="WordPress 5.2.1">
版本号是默认添加的,但是可以被黑客利用,攻击特定版本的WordPress漏洞。
移除代码:
remove_action( 'wp_head', 'wp_generator' );
WordPress自动添加两行离线编辑器的开放接口,在head区域,可以看到:
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://wordpress.cc/xmlrpc.php?rsd"> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://wordpress.cc/wp-includes/wlwmanifest.xml">
其中RSD是一个广义的接口,wlwmanifest是针对微软Live Writer编辑器的。如果你不需要离线编辑,可移除之。即便你需要使用离线编辑器,大部分时候也不需要这两行代码。保留这两行代码可能会留有安全隐患。
移除代码:
remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' );
3、移除前后文、第一篇文章、主页meta信息
WordPress把前后文、第一篇文章和主页链接全放在meta中。对SEO的帮助并不大,反而让增多head头部信息。建议删除
移除代码:
remove_action( 'wp_head', 'index_rel_link' );//移除主页链接 remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//删除上下篇文章链接
4、移除shortlink标签
在WordPress 3.0开始,即使你已经设定了永久链接,但是在文章页面标签内还是会出现一个shortlink标签,如果不想搜索引擎抓取 “/?p=” 的网址,那么head头部里短网址标签一并移除吧。移除代码如下:
remove_action( 'wp_head', 'wp_shortlink_wp_head',10, 0 );//删除短链接
5、移除feed
HTML中通过<link rel=”alternate” type=”application/rss+xml” title=”feed名” href=”http://xxx.com/feed/” />来指定博客feed。当网站发布新内容时,可以让浏览器发现并提醒已订阅用户。如果你不想添加feed,那就删除它。
移除代码:
remove_action( 'wp_head', 'feed_links', 2 );//文章和评论feed remove_action( 'wp_head', 'feed_links_extra', 3 ); //分类等feed
6、禁用embeds功能并移除wp-embed.min.js文件
WordPress自动添加embeds功能和wp-embed.min.js文件,在head区域,可以看到:
<script type="text/javascript" src="http://wordpress.cc/wp-includes/js/wp-embed.min.js?ver=5.2.1"></script>
移除代码:
function disable_embeds_init() { /* @var WP $wp */ global $wp; // Remove the embed query var. $wp->public_query_vars = array_diff( $wp->public_query_vars, array( ’embed’, ) ); // Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route' ); // Turn off add_filter( 'embed_oembed_discover', '__return_false' ); // Don't filter oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 ); // Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); // Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' ); // Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); } add_action( 'init', 'disable_embeds_init', 9999 ); /** * Removes the 'wpembed' TinyMCE plugin. * * @since 1.0.0 * * @param array $plugins List of TinyMCE plugins. * @return array The modified list. */ function disable_embeds_tiny_mce_plugin( $plugins ) { return array_diff( $plugins, array( 'wpembed' ) ); } /** * Remove all rewrite rules related to embeds. * * @since 1.2.0 * * @param array $rules WordPress rewrite rules. * @return array Rewrite rules without embeds rules. */ function disable_embeds_rewrites( $rules ) { foreach ( $rules as $rule => $rewrite ) { if ( false !== strpos( $rewrite, 'embed=true' ) ) { unset( $rules[ $rule ] ); } } return $rules; } /** * Remove embeds rewrite rules on plugin activation. * * @since 1.2.0 */ function disable_embeds_remove_rewrite_rules() { add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); flush_rewrite_rules(); } register_activation_hook( __FILE__, 'disable_embeds_remove_rewrite_rules' ); /** * Flush rewrite rules on plugin deactivation. * * @since 1.2.0 */ function disable_embeds_flush_rewrite_rules() { remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
7、移除WordPress头部加载DNS预获取(dns-prefetch)
在head我们可以看到:
<link rel="dns-prefetch" href="//s.w.org">
移除代码:
function remove_dns_prefetch( $hints, $relation_type ) { if ( 'dns-prefetch' === $relation_type ) { return array_diff( wp_dependencies_unique_hosts(), $hints ); } return $hints; } add_filter( 'wp_resource_hints', 'remove_dns_prefetch', 10, 2 );
8、移除emoji表情script和style
在head可以看到:
<script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"http\/\/s.w.org\/images\/core\/emoji\/2.3\/72x72\/","ext":".png","svgUrl":"http\/\/s.w.org\/images\/core\/emoji\/2.3\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/wordpress.cc\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.8"}}; !function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline="top",k.font="600 32px Arial",a){case"flag":return k.fillText(f(55356,56826,55356,56819),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,56826,8203,55356,56819),0,0),c=j.toDataURL(),b===c&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447),0,0),c=j.toDataURL(),b!==c);case"emoji4":return k.fillText(f(55358,56794,8205,9794,65039),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55358,56794,8203,9794,65039),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g,h,i,j=b.createElement("canvas"),k=j.getContext&&j.getContext("2d");for(i=Array("flag","emoji4"),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++)c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports[i[h]],"flag"!==i[h]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[i[h]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style>
这样一大段emoji表情包含的代码,会在页面加载静态资源,建议禁用和移除JS文件。
禁用代码:
remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' );
9、移除wp-json链接
在head我们可以看到
<link rel="http://api.w.org/" href="http://wordpress.cc/wp-json/">
移除代码:
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
二、部分函数解释
1、wp_head()函数
wp_head()是wordpress的一个非常重要的函数,基本上所有的主题在header.php这个文件里都会使用到这个函数,而且很多插 件为了在header上加点东西也会用到wp_head(),比如SEO的相关插件。不过在wp_head()出现的这个位置,会增加很多并 不常用或多余 的代 码,删除时这些不常用或多余可以通过remove_action移除这些代码。
2、 remove_action函数
函数原型:
remove_action( $tag, $function_to_add, $priority, $accepted_args );
该函数移除一个附属于指定动作hook的函数。该方法可用来移除附属于特定动作hook的默认函数,并可能用其它函数取而代之。
重要:添加hook时的$function_to_remove 和$priority参数要能够相匹配,这样才可以移除hook。该原则也适用于过滤器和动作。移除失败时不进行警告提示。
参数
- $tag(字符串)(必需)将要被删除的函数所连接到的动作hook。默认值:None
- $function_to_remove(回调)(必需) 将要被删除函数的名称默认值:None
- $priority(整数)(可选)函数优先级(在函数最初连接时定义)默认值:10
- $accepted_args(整数)(必需)函数所接受参数的数量。默认值:1
返回值
(布尔值)函数是否被移除。
- Ttue 函数被成功移除
- False函数未被移除