WordPress博客HTTP头信息优化

自媒体 思享 2517浏览

大家在做中文网站的时候应该都有接触过百度站长工具吧,那么你关注过抓取诊断工具中返回的HTTP头信息了吗?如果还不知道这个那就out了。这里就不给大家补脑了,不懂得话可以自行百度,我今天要给大家发布是教程是如何清理由WordPress程序产生的一些我们不需要的HTTP头信息,这些信息可能会对我们网站的安全以及SEO产生影响,没有关注过的朋友可以重视一下哦!

屏蔽多余的头部信息

X-Pingback

这一项会可能会暴露我们网站的真实路径,对我们网站造成安全性问题,如果我们没有使用WP的离线文章发布接口的话建议关闭这个功能,网络上已经爆出了xmlrpc.php文件被黑客利用攻击网站的新闻这里就不多说了。

清理X-Pingback信息

这一步呢需要分两次进行,第一次我们先把WP的Pingback功能给禁用,然后我们以后发布文章都会自动关闭这个功能,我们可以通过下面的代码快速禁用Pingback功能:

//关闭 XML-RPC 离线发布功能
add_filter('xmlrpc_enabled', '__return_false');

如果我们只想屏蔽Pingback功能,让离线发布还能继续使用那么可以使用下面的代码:

/WordPress 关闭 XML-RPC 的 pingback 端口
add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
    unset( $methods['pingback.ping'] );
    return $methods;
}

下面我们要对老文章做处理,清除旧文章的Pingback选项,这一步我们需要操作数据库来实现:

//使用SQL语句批量关闭Pingback功能
UPDATE wp_posts SET ping_status = 'closed' WHERE post_date < '2017-11-24'

link

上面返回的两条link信息Link: <https://www.4xseo.com/wp-json/>; rel="https://api.w.org/"这个是WP提供的一个开发式接口,一般我们也用不到;Link: <https://www.4xseo.com/?p=755>; rel=shortlink 这个是当前页面的短链接,我们都知道一个页面最好只有一个链接可以访问到,对于这个短链接我们用不到不说还可能会影响到我们网站的SEO优化。

第一步屏蔽link头部信息

这个屏蔽起来非常的简单就是把WP相关的代码给取消挂载,当然我们不会让大家去修改WP的程序文件,因为难度太大。我们只需把下面的代码添加到主题的functions.php文件中即可。

//屏蔽WP产生的rel=shortlink头部信息
remove_action('template_redirect','wp_shortlink_header',11,0);
//屏蔽WP自带API产生的头部信息
remove_action( 'template_redirect','rest_output_link_header', 11, 0 );

我们可以把上面的代码添加到functions.php文件中之后再到检测工具中重新查询看看link标签是否消失了。

如果你的网站存在这些问题,那么我们下面的教程一定可以给你排忧解难。

通过上面的代码我们网站页面的HTTP返回的头部信息顿时清爽了很多,下面就可以去给自己的网站做下诊断,有责改之,木有的话可以收藏一下,便于日后出现这种问题时及时应对哦!

原文:以上出自晨星博客

设置Modified

什么 304 Not Modified Header

客户端(一般是浏览器)发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回 304 Not Modified 这个状态码。

浏览器在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端,只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200。

WordPress 中如何开启 304 Not Modified Header

WordPress 作为一个 CMS 系统,如果每天更新的内容不多,对于未登录的用户来说,每次访问同一个页面,如果浏览器中已经有缓存,其实服务器无需再次生成一次页面,直接返回 304 Not Modified Header,让用户直接查看浏览器中缓存即可。

那么在 WordPress 中如何给未登录用户开启 304 Not Modified Header 呢?可以在当前主题的 functions.php 函数加入以下代码:

add_filter('wp_headers','wpjam_headers',10,2);
function wpjam_headers($headers,$wp){
    if(!is_user_logged_in() && empty($wp->query_vars['feed'])){
        $headers['Cache-Control']   = 'max-age:600';
        $headers['Expires']         = gmdate('D, d M Y H:i:s', time()+600) . " GMT";

        $wpjam_timestamp = get_lastpostmodified('GMT')>get_lastcommentmodified('GMT')?get_lastpostmodified('GMT'):get_lastcommentmodified('GMT');
        $wp_last_modified = mysql2date('D, d M Y H:i:s', $wpjam_timestamp, 0).' GMT';
        $wp_etag = '"' . md5($wp_last_modified) . '"';
        $headers['Last-Modified'] = $wp_last_modified;
        $headers['ETag'] = $wp_etag;

        // Support for Conditional GET
        if (isset($_SERVER['HTTP_IF_NONE_MATCH']))
            $client_etag = stripslashes(stripslashes($_SERVER['HTTP_IF_NONE_MATCH']));
        else $client_etag = false;

        $client_last_modified = empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? '' : trim($_SERVER['HTTP_IF_MODIFIED_SINCE']);
        // If string is empty, return 0. If not, attempt to parse into a timestamp
        $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0;

        // Make a timestamp for our most recent modification...
        $wp_modified_timestamp = strtotime($wp_last_modified);

        $exit_required = false;

        if ( ($client_last_modified && $client_etag) ?
                 (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) :
                 (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) {
            $status = 304;
            $exit_required = true;
        }

        if ( $exit_required ){
            if ( ! empty( $status ) ){
                status_header( $status );
            }
            foreach( (array) $headers as $name => $field_value ){
                @header("{$name}: {$field_value}");
            }

            if ( isset( $headers['Last-Modified'] ) && empty( $headers['Last-Modified'] ) && function_exists( 'header_remove' ) ){
                @header_remove( 'Last-Modified' );
            }

            exit();
        }
    }
    return $headers;
}

该功能已经整合到 WPJAM Basic 插件中,现已免费提供下载,你只需要勾选下就可以自动添加!

上图就是我爱水煮鱼针对未登录用户开启 304 缓存之后,用户再次访问同一页面时候得到 304 Not Modified 状态。

开启 304 状态,相应会带来一些问题,比如用户更新留言了,其他用户可能会看不到,当然如果你要你用第三方评论系统,那就不存在这个问题,还有 Postview 会有一些统计不再计入等各种问题,你可以根据自己的需求开启。

以上文字出自:我爱水煮鱼

推荐阅读

WordPress不同分类设置不同模板文件

最近想给博客添加一个问答板块,本来想用插件dw-question-answer实现的,但是后来感觉加在博客里会感觉怪怪的,还不如以后单独搞个社区,至于博客,设置一个单独的样式模板凑合着用就可以了,于是在网上找到了实现不同模板的代码,给大家参考...

如何处理WordPress CPU占用100%很高的问题!

用 wordpress建站的朋友都知道,造成wordpress站点占用服务器cup过高的原因是wordpress程序占用的资源较大,因为它没有缓存功能,所以在你访问网站或者登陆后台的时候就消耗了很多资源。如果你再用随机文章、相关文章并带有缩略图的插件......

WordPress哪些地方可以做seo优化

WordPress应该是被使用最多的CMS系统,记得以前看到过报道,全世界20%以上的网站用的是WP。虽然最初是作为博客写作CMS发布的,但现在不仅博客使用,新闻、杂志、门户类网站也用,简单的电子商务网站也能用WP,最近越来越多企业网站也开始使用Wo......