标签 wordpress 下的文章

国外的主题对中文支持不好很不和谐,需要修改的地方很多,用起来也很麻烦,但是古语有云:

Bitch is bitchy!Taylor is Swift!

下面就记录一下更新主题前后的工作。动手能力强的可以参考这里自己写一个子主题,也可以完美解决!

  • 预先备份原来主题文件夹,起个名字叫old_theme。留个后悔药      备份路径wp-content/themes/sparkling ,sparkling就是老高的主题
  • 升级主题,原主题被覆盖
  • 老高修改过的文件包括(old_theme文件夹里按时间排序就能找到)

    1. header.php   ---|---|seo优化
    2. functions.php ---|--常用函数
    3. single.php      ---|---| 解决手机底部链接打不开的样式问题
    4. content.php   ---|---|-主页显示文章字数限制,参考这篇文章
    5. footer.php     --------统计代码已解决
  • 在新的主题文件夹中找到对应文件并修改 子主题以后讲

本文适合新手老手,有不对的地方欢迎指正!
如果有什么问题或者建议,请务必留言, :-)

老高很高兴与大家交流! 同时欢迎关注我的微博

写在前面:搜索引擎是个很神奇的东西,脾气捉摸不定,动不动就学个新算法让你不得安居乐业。许多新手都会觉得想让搜索引擎收录真难啊! 那么对于刚刚建成的新站和收录有问题的旧站,如何才能让搜索引擎顺利的收录你的网站呢? 花点时间看完本文,我相信你对SEO的理解一定会更加透彻。 预先约定几个说法(不分大小写)

  • wordpress ->wp
  • Search Engine Optimization->SEO
  • Uniform Resource Locator ->URL 下面老高就针对wordpress的SEO优化讲讲具体的步骤:

浅谈URL的优化

说到SEO,最先想到的应该是URL了,什么!你不知道URL是啥? 8-O 简单地说,URL就是

统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。https://blog.phpgao.com/ 就是一个URL,访客和搜索引擎就是靠他找到你的资源。URL的优化其实很简单,做到以下几点就OK!

伪静态

美化你的URL显示格式,即做好伪静态,打个例子,本文的URL默认为www.phpgao.com/?p=***|的形式,\*|为文章的数字ID,但是实际上他显示为www.phpgao.com/seo.html,如果这两个URL都指向同一篇文章,哪一个更能勾起你的欲望呢?同样的,搜索引擎也会试着理解你的URL ,然后抓取你的内容,分以适当的权重    ---|-  那么如何设置成这样的形式呢?首先需要了解伪静态、404错误、linux、win主机等概念,后面章节有讲。

网站地图

URL格式确定以后下面就要把你的URL告诉搜索引擎了,所以你需要一个网站地图,他可以告诉搜索引擎网站是什么结构,哪些页面比较重要,哪些可以忽略,有利于搜索引擎抓取。

robots.txt

robots的作用是控制爬虫的抓取范围,举个比方,你可以禁止爬虫收录你的wp-admin文件夹下所有文件,这样可以保证安全性。你需要明确的是,爬虫来到你的网站,就像吃货进了一个自助餐馆一样,只要能吃的他都不放过,如果你放任不管,那么可能他会把你和你太太盘子里的饭菜都会吃掉。所以你必须告诉他:“爬虫兄啊,你不能吃这个,这个是桌子!”。简单的介绍一下用法:

  • 请将robots.txt放到网站的根目录下,你可以参考一下www.taobao.com/robots.txt(百度中枪)
  • 编码无所谓,一般不会出现中文
  • 第一行写User-agent: *     意思只针对所有搜索引擎的爬虫
  • 紧接着Disallow: /wp-*    意思是不允许看wp-开头的所有文件
  • 你可以写很多个Disallow规则,记得首字母要大写
  • 你还可以在文件中指明sitemap路径    Sitemap: https://blog.phpgao.com/sitemap
  • robots.txt不要过于复杂 robots文件真的很重要,老高之前写过一个爬网页的程序放到了某个二级目录下,并在首页加了链接,但是忘记了屏蔽搜索引擎,导致谷歌收录了本站的9000多个垃圾内容页 :-( ,悲剧啊!话说百度还是很谨慎的,就是不收录!

提交入口--来我家玩吧!

提供几个提交网站的入口,此步是通知搜索引擎来收录你的网站

  1. 百度网站登录入口
  2. Google网站登录入口
  3. 360网站登录入口
  4. Bing网站登录入口
  5. 搜狗网站收录提交入口 这步最简单了!不要偷懒哦! 8-)

站长工具--查询收录的利器

站长工具就站长管理网站收录,转化率等信息的瑞士军刀

  1. 百度站长工具
  2. 谷歌站长工具
  3. seo工具

老高要在这里赞一下百度的抓取诊断功能,通过使用发现百度没有更新我站的DNS信息,于是换了DNSPOD解析,立马解决问题!

由于网络错误导致抓取失败

网站统计分析

网站统计,顾名思义就是统计网站浏览量,分析受众群体。原理是通过放脚本或者图片链接在你的网站里,每次访问的时候都会将此次请求信息发送给统计服务器,然后就可以在统计后台查看到实时访问信息了。与基于访问日志分析的办法不同,这种统计方法不是很准确,但是对付一般需求足够了!使用此插件必须在wp主题文件footer.php加入系统提供给你的统计代码,老高的经验是把统计代码加入一个

包裹的div中,因为可能一不小心,这条统计代码会带出来一个很丑的图片,影响网站美观!所以最终的代码会是这样的,其中script标签才是真正的统计代码,div的工作是让他不要影响网站的呈现。

<div style="display:none;">
    <script type="text/javascript">
        var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
        document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F3f160ebbf44197dc430ec2f519e5e8f4' type='text/javascript'%3E%3C/script%3E"));
    </script>
</div>

主流工具如下:

  • 百度统计
  • 谷歌分析
  • 老高推荐百度统计(基于速度考虑)

直到这一步!你的网站才算是真正投入到了互联网这个茫茫大海之中,你要意识到的是搜索引擎只是索引到了互联网信息的一小部分而已,而这个数字已足够庞大,所以逛光光完成到这一步是不够的,下面就是提高篇!

优化访问速度

选择主机系统

这里你有两种选择

  • windows+iis
  • linux+apache

一般来说,linux主机是比win贵的,原因是:

更安全,windows面对黑客只能说雅蠛蝶了
更快,不是网速快,而是同等硬件下linux+apache跑PHP性能更好
更强大,其实最主要还是说伪静态的问题,linux天然支持,IIS就悲剧了,先哭着 :-( ,后面说原因
更稳定,linux一般很少死机的,windows我只能说呵呵了
总之,钱多就上linux;苦逼的话win还是能接受的。

服务器地址

内地?香港?美国?韩国?到底搬哪儿好呢?

这还用问?当然是离得越近,速度越快了!下面简单说说利弊吧:

内地主机速度一定不会太慢,但是需要网站已备案
香港主机速度不一定,我在XX购买的空间电信打不开,网通倒是挺快。。。很郁闷
美国主机速度可能不如香港,快也快不到哪儿去
韩国速度和以上两地差不多

再此还是要罗嗦几句:

一般购买一年的空间,商家都会承诺一个月内退款的,没有声明的话请勿使用,或者提出试用要求,并且使用超级PING工具测速
一定要看看空间服务商的备案号,很多都是假的

★★网站开始运行后一定要定时备份,不论是空间还是数据库!★★

GZIP–压缩html

GZIP一看就知道是压缩用的,能开就开吧。一般的panel都是提供这个功能的,如果没有也不影响。

查询是否压缩请使用Gzip检测工具检测,至于压缩率嘛,自己看吧!

是否压缩 是
压缩类型 gzip
原始文件大小 89103 字节
压缩后文件大小 13896 字节

伪静态

伪静态就是为了让url美观一些,本文的网址为默认为

https://blog.phpgao.com/?p=238

但我修改固定连接格式是之变成了

https://blog.phpgao.com/seo.html

看到这个URL你会不会觉得根目录下就有一个seo.html吧?

其实不然,当你的浏览器访问了此网址https://blog.phpgao.com/seo.html,服务器在解析这个URL时会参考你的伪静态规则,隐性的将url变为https://blog.phpgao.com/index.php/seo.html,然后剩下工作就交给index.php,他会帮你找到对应的文章显示给读者!

IIS

IIS悲剧的伪静态ISAPI_Rewrite分版本不说,不同版本伪静态的写法还有差别。。。设置参考我的文章

IIS下wordpress伪静态的配置

APACHE

这里风景一片大好,htaccess教IIS学做人

404补救

404也可以伪静态,但是设置很麻烦,一般不推荐。
原理就是当访问一个不存在的地址,服务器会找一个叫类似404.php的文件,在这个文件中分析URL并导航至相应页面去。

有兴趣自己实现的请百度之!

静态内容加速

原理就是CDN服务商将你的网页文件缓存之,然后你的服务器就不用提供诸如jpg,css,js等不常更新的文件,减小了自己服务器的压力,好用的加速主要有七牛。

网站结构优化

一个网站可能有很多栏目,栏目下会有许多文章,就像大树上结的果子。文章之间可能也会有相互关联,这种关系叫做叫内链。相对的,文章或栏目等指向他人网站的链接就叫外链。
每篇文章有自己的标题、关键字、描述和内容。

以上几个概念就是组成一个网站的基本结构。

文章的结构

标题、关键字、摘要和内容分别对应英文中的title,keywords,desciption、content。 这些词语在几乎每一个网页中都有体现,搜索引擎就是根据以上几个属性来了解一个网站的所有内容。 其重要性按大小排序:content>title>desciption>keywords 所以在优化策略中,如果你的内容和别人的一样(比如使用火车头采集),那么如果你的标题设置的好,或者描述提取的好,那么你的排名就相对靠前一点。 (未完待续)

参考:

http://www.chinaz.com/web/2011/0727/201918.shtml

http://www.xmlas.com/robots-google-txt.html

一般wordpress主题都会在head标签之间使用wp_head()函数,因为这是个很重要的头部函数,很多功能插件都会用到它。 不过,如果你的wordpress主题用到了该函数,则会在head头部显示许多冗余的代码。

如果希望移除wordpress头部的多余代码,可以使用以下方法解决: 在主题文件夹下的functions.php文件中加入以下代码:


remove_action( 'wp_head', 'wp_generator' );//WordPress版本信息。
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );//最后文章的url
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );//最前文章的url
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//上下文章的url
remove_action( 'wp_head', 'feed_links_extra', 3 );//去除评论feed
remove_action( 'wp_head', 'feed_links', 2 );//去除文章的feed
remove_action( 'wp_head', 'rsd_link' );//针对Blog的离线编辑器开放接口所使用
remove_action( 'wp_head', 'wlwmanifest_link' );//如上
remove_action( 'wp_head', 'index_rel_link' );//当前页面的url
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );//短地址

来源: http://www.daxiawp.com/remove-wordpress-head-code.html

博客用的国外的主题,对中文处理不是太好。尤其是首页会把文章的全部内容都输出,使首页变得很长,对于我这种爱贴代码的程序猿来说,这个病,必须治!

解决办法有三种:

  1. more标签
  2. 自己写方法截取文字
  3. the_excerpt()

more标签

以下引用sumile_ting 的话:

这种方法是在每次写文章时在文章中插入一个More标签。

添加More标签的方法:

写文章时,在需要作为摘要的地方点击编辑器中的More标签,或在HTML编辑状态加加入<!–more–>,或者直接按Alt+Shift+T,3种方法任选其一。

这种方法使用起来太麻烦,要求每一篇文章都得手动加,一不小心可能就忘记了。还不如修改主题模板来的方便快捷。

自造方法

自己写方法必须对function.php和content.php做改写,先找到

<?php the_content(); ?>

the_content()方法返回了文章的内容,处理一下就可以限制字数了,具体方法请自查。

但是对于我还是不合适,因为此时文章还没有被插件渲染,文章内的代码会被直接以纯文本的形式展示,很不和谐。
所以这个方案,pass

the_excerpt()

此方法是wordpress显示文章摘要的API,效果与the_content() 一样,只是这个函数对中文支持不好,需要处理一下

以下是步骤:

方法2的the_content()修改为the_excerpt()
在function下加入以下代码

function custom_excerpt_length( $length ) {
    return 200;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

给readmore加个链接,同样在functions.php中添加:

function new_excerpt_more( $more ) {
    return '<a href="' . get_permalink() . '">阅读全文</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');

完美解决

参考:

http://sumile.blog.hexun.com/63924812_d.html

http://www.gemshe.com/fashion/suneyeglass/wordpress%E7%9A%84%E6%96%87%E7%AB%A0%E5%BD%A2%E5%BC%8Fget_post_format/

http://www.seanstudio.com/archives/2558

http://www.daxiawp.com/change-to-excerpt.html

运行SQL一定要备份,以防万一!

先来看看每个表的功能吧

wp_commentmeta:存储评论的元数据
wp_comments:存储评论
wp_links:存储友情链接(Blogroll)
wp_options:存储WordPress系统选项和插件、主题配置
wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
wp_posts:存储文章(包括页面、上传文件、修订)
wp_terms:存储每个目录、标签
wp_term_relationships:存储每个文章、链接和对应分类的关系
wp_term_taxonomy:存储每个目录、标签所对应的分类
wp_usermeta:存储用户的元数据
wp_users:存储用户信息  

删除残留垃圾数据

使用WordPress经常换主题删主题,装插件删插件很正常,但是简单的删除并不彻底,数据库会有残留,多余的数据保留在post_meta表格里,久而久之就成了一堆可观的垃圾。可使用下面的SQL语句来清除不需要的postmeta值。有益于加快数据库运行速度,减小数据。 执行SQL语句

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';

删除草稿修订版本

在WordPress后台中编辑文章时,系统会自动保存许多修订的副本。过多的修订记录会加重数据库的负担并造成了资源的浪费。数据库越来越庞大,增加了数据检索影响页面的加载时间。 执行SQL语句

DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

注意:此方法将删除所有的文章的所有修订版,包括相关的meta数据。

处理未使用的标签

在WordPress数据库中,如果你使用一个查询语句手动来删除旧的文章,旧的标签却仍然会保留并在你的标签云/列表中出现。你可以使用下面的方法识别未使用的标签并将它删除。 执行SQL语句

SELECT * FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id
INNER JOIN wp_term_relationships wtr ON wtr.term_taxonomy_id=wtt.term_taxonomy_id
LEFT JOIN wp_posts wp ON wp.ID=wtr.object_id
WHERE taxonomy='post_tag'
AND ID IS null
AND NOT EXISTS(SELECT * From wp_terms wt2
INNER JOIN wp_term_taxonomy wtt2 ON wt2.term_id=wtt2.term_id WHERE wtt2.parent=wt.term_id) ORDER BY name;

修复和优化

执行完所有的语句之后,全选所有的表,然后选择“修复表”和“优化表”。 (来源于互联网)

找到网站个目录下文件夹:wp-include文件夹下的class-wp.php,定位此代码段(V3.6在144行)

老高温馨提示:使用本教程前请备份数据库及相关文件

if ( isset($_SERVER['PATH_INFO']) )
    $pathinfo = $_SERVER['PATH_INFO'];
else
    $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];

修改为 

if ( isset($_SERVER['PATH_INFO']) )
    $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
else
    $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

至此,wordpress已经学会读中文了。

还有一种解决方式,即给每一个标签都设置一个英文别名,这样设置的标签还是不能使用中文,可以使用下面的代码将所有的标签格式化:

<?php
    header("Content-type: text/html; charset=utf-8");
    // 修改:LAOGAO https://blog.phpgao.com/
    define('MYSQL_HOSTNAME', 'localhost');
    define('MYSQL_USERNAME', 'yourusername');
    define('MYSQL_PASSWORD', 'yourpassword');
    define('MYSQL_DATABASE', 'yourdatabase');
    define('MYSQL_TABLEPRE', 'wp_'); // 表前缀

    error_reporting(E_ALL);
    ini_set('display_errors', 'On');

    $link = mysql_connect(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD);
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    echo 'Connected successfully<br />';

    mysql_select_db(MYSQL_DATABASE, $link);

    // 下面三句的作用是设置当前连接编码为UTF-8标准。
    // 所以请确保你的WordPress数据库是符合UTF-8编码标准,
    // 否则请自行将下面的UTF-8改成相应的字符集。
    mysql_set_charset('utf8', $link);
    mysql_query('SET NAMES UTF8');
    mysql_query("SET character_set_results = 'utf8', " . "character_set_client = 'utf8', " . "character_set_connection = 'utf8', " . "character_set_database = 'utf8', " . "character_set_server = 'utf8'", $link);
    // 字符设置结束
    echo '<br />';

    // 下面为encode编码tag中的中文slug
    $res = mysql_query("SELECT `term_id`,`name` FROM " . MYSQL_TABLEPRE . "terms");
    //echo "SELECT `term_id`,`slug` FROM ".MYSQL_TABLEPRE."terms";
    while ($row = mysql_fetch_array($res)) {
        echo 'id=' . $row[0] . ' - ' . 'name=' . $row[1] . ' --- ';
        if (mysql_query('UPDATE `' . MYSQL_TABLEPRE . 'terms` SET `slug`=\'' . urlencode($row[1]) . '\' WHERE `term_id` =' . $row[0])) {
            echo 'UPDATED!<br />';
        }
    }
    // 编码结束

    mysql_close($link);

    echo '完成!<br />';
    exit();
?>

又重新安装了一次WP,记录一下:

  • 使用足够安全的账号和密码
  • 写一篇“关于我”的页面放到主页
  • 删除预设的文章和评论
  • favicon是网站的图标,可以参考这篇文章
  • 等到有>=20篇文章后在开放给搜索引擎
  • 申请一个Akismet的API,并开启它
  • 如果是程序员,推荐安装Crayon Syntax Highlighter高亮你的代码
  • 修改默认的固定连接为 自定义:https://blog.phpgao.com/index.php/%postname%/,这样有利于seo
  • 与URL有关的设置尽量用英文单词或短句,wp对中文支持不太友好
  • sitemap类的插件还是装一下,不知道这个怎么样 WordPress结构化数据插件
  • 如果你写的东西很有条理,那我建议安装此插件---|---|文章自动插入目录的插件:Table of Contents Plus
  • 如果你想统计多少人看过你的日志,请试试这个插件 WP-PostViews

博客这个东西的核心是表达,与其花时间搞搞这搞搞那,还不如把文章质量提高提高,写一些有创新性的东西出来,百度呀什么的最喜欢了。