网站SEO优化
前言
SEO是由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”。
在建站之初,各个搜索引擎是无法搜索到我们的网站,首先要做的就是让各大搜索引擎收录我们的站点,爬虫抓取网站,才能通过搜索引擎找到我们的网站。对于Hexo
博客来说,如果你是部署在GitHub Pages
,那么你是无法被百度收录的,因为GitHub
禁止了百度爬虫,最常见的解决办法是双线部署到Coding Pages
和GitHub Pages
,这样百度爬虫可以爬取到 Coding 上的内容,从而实现百度收录。另外百度收录的所需的时间较长,大约半个月左右才会看到效果!
判断自己站点是否被收录:在搜索引擎中输入site:<域名>
,如果如下图所示就是说明我们的网站并没有被百度收录。
下面借助谷歌及百度两大搜索引擎分别使用两种不同的方法介绍如何收录网站。
一、百度收录
(1)、验证网站所有权
登录百度站长搜索资源平台,登录成功之后在站点管理中点击添加网站。
注意,这里需要输入我们自己购买的域名,不能使用
xxx.github.io
之类域名.因为github
是不允许百度的spider
(蜘蛛)爬取github
上的内容的,所以如果想让你的站点被百度收录,只能使用自己购买的域名。
在填完网址后需要验证网站的所有权,验证网站所有权的方式有三种:
- 文件验证
html
标签验证CNAME
解析验证
在这里我们第一种方式使用文件验证介绍网站收录。
- 下载验证文件至根目录下的
source
文件夹中。
- 使用
vi
命令编写验证文件,为防止文件Hexo
被解析,在验证文件上方设置布局为layout:false
:
---
layout: false
---
如图:
收录网站所说的验证文件需放入目录根文件下,是指生成部署后的文件夹的根目录,也就是要生成到本地
plublic
文件夹中,或部署到远程仓库的根目录。因此,我们直接将验证文件放在本地博客根目录是无法部署生成到远程仓库的。
根目录下source
文件夹:除_posts
文件夹之外,开头命名为_
(下划线)的文件/
文件夹和隐藏的文件将会被忽略。Markdown
和HTML
文件会被解析并放到public
文件夹,而其他文件会被拷贝过去。
因此,将验证文件放入source
文件夹中,并设置layout: false
防止被解析。才能正常将验证原文件部署到远程仓库的根目录。
- 重新部署到远程仓库之后点击验证即可。
(2)、生成网站地图
站点地图的作用是告诉搜索引擎你的网站结构等信息,让搜索引擎更智能抓取内容。我们需要使用npm
自动生成网站的sitemap
,然后将生成的sitemap
提交到百度和其他搜索引擎。
- 安装sitemap插件
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
- 修改博客配置文件
在根目录配置文件.yml中修改url为你的站点地址
执行完hexo g
命令之后就会在网站根目录生成sitemap.xml
文件和baidusitemap.xml
文件,可以通过:https://你的域名/baidusitemap.xml
, 查看该文件是否生成,其中sitemap.xml
文件是搜索引擎通用的文件,baidusitemap.xml
是百度专用的sitemap
文件。
- 向百度提交链接
然后我们就可以将我们生成的sitemap
文件提交给百度,还是在百度站长平台,找到链接提交,这里我们可以看到有三种提交方式,API提交和sitemap
、手动提交。还有一种方法是加入JS
代码的自动提交。
如何选择链接提交方式
API提交:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
自动推送:最为便捷的提交方式,请将自动推送的JS
代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
**sitemap
**:您可以定期将网站链接放到sitemap
中,然后将sitemap
提交给百度。百度会周期性的抓取检查您提交的sitemap
,对其中的链接进行处理,但收录速度慢于主动推送。
手动提交:一次性提交链接给百度,可以使用此种方式。
一般主动提交比手动提交效果好,这里介绍主动提交的三种方法
从效率上来说:
API提交>自动提交>
sitemap
- API提交
安装插件hexo-baidu-url-submit
npm install hexo-baidu-url-submit --save
baidu_url_submit:
count: 80 # 提交最新的多少个链接
host: www.sunhwee.com # 在百度站长平台中添加的域名
token: xxxxxxxxxxxxxx # 请注意这是您的秘钥, 所以请不要把博客源代码发布在公众仓库里!
path: baidu_urls.txt # 文本文档的地址, 新链接会保存在此文本文档里
再加入新的部署deploy
:
deploy:
- type: baidu_url_submitter
如图所示:
密钥的获取位置在网页抓取中的链接提交这一块,如下所示:
执行hexo deploy
,新的链接就会被推送了。
- API提交
在主题配置文件下设置,将baidupush
设置为true
:
# 百度搜索资源平台提交链接
baiduPush: true
然后主题文件目录加入下面代码,一般在目录/themes/matery/layout/_partial
中的head.ejs
中加入下面JS
代码(有可能你的目录不是这样,原理类似),这样全站都有了:
<% if (theme.baidu_push) { %>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; }
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<% } %>
这样每次访问博客中的页面就会自动向百度提交sitemap
。
sitemap
方式
将我们上一步生成的sitemap文件提交到百度就可以了~
让大家看一下现在的成果:
被看了,收录结果还没出来。太慢了。
二、谷歌收录
相比于百度,google的效率实在不能更快,貌似一天左右站点就被收录了,其实方法是和百度是一样的。
(1)、验证网站所有权
谷歌收录使用另外一种方式收录,无需下载验证文件放入根目录,只需添加一条DNS解析记录即可~
- 登录谷歌站长平台:
- 添加自己的域名:
- 验证所有权
将生成的记录复制:
登录到自己域名的提供商网站添加解析记录:
- 然后点击验证即可
(2)、生成站点地图
- 到谷歌的
Search Console
,添加自己的sitemap
地址
利用之前生成的sitemap
,部署完成之后即可直接输入:
- 收录成功
接下来只需要等就好了,相比于百度,谷歌的时间会很快。
三、其他SEO优化
(1)、提交robots.txt:
等待被谷歌收录之后,发现搜索结果有一些我们不需要的页面被显示在搜索结果中:
面对这样的问题我可以在网站根目录下添加robots.txt
文件,robots.txt
是一种存放于网站根目录下的ASCII
编码的文本文件,它的作用是告诉搜索引擎此网站中哪些内容是可以被爬取的,哪些是禁止爬取的。
robots.txt
放在博客目录下的source
文件夹中,博客生成后在站点目录 /public/
下。
每个人的内容不一样,给一个参考:
User-agent: *
Allow: /
Allow: /posts/
Disallow: /about/
Disallow: /archives/
Disallow: /js/
Disallow: /css/
Disallow: /contact/
Disallow: /fonts/
Disallow: /friends/
Disallow: /libs/
Disallow: /medias/
Disallow: /page/
Disallow: /tags/
Disallow: /categories/
编写完以上内容再重新部署一下,然后到百度资源平台的数据监控->Robots点击检测并更新 看能不能检测到。
也可进入Google Search Console
- 抓取 -robots.txt
测试工具进行测试。
(2)、URL优化
一般来说,SEO搜索引擎优化认为,网站的最佳结构是 用户从首页点击三次就可以到达任何一个页面,但是我们使用Hexo编译的站点结构的URL是:域名/年/月/日/文章标题四层的结构,这样的URL结构很不利于SEO,爬虫就会经常爬不到我们的文章,于是,我们需要优化一下网站文章的URL
- 方案一:
直接改成域名/文章标题的形式,在Hexo配置文件中修改permalink
如下:
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://blog.sky03.cn
root: /
permalink: :title.html
permalink_defaults:
这个方式有个不好的地方:
直接以文章的标题作为URL,而我们所写的文章的标题一般都是中文,但是URL只能用字母数字和标点符号表示,所以中文的URL只能被转义成一堆符号,而且还特别长。
- 方案二:
安装固定链接插件:hexo-abbrlink
插件作用:自动为每篇文章生成一串数字作每篇文章的URI地址。每篇文章的Front-matter中会自动增加一个配置项:abbrlink: xxxxx,该项的值就是当前文章的URI地址。
Hexo根目录执行:
npm install hexo-abbrlink --save
Hexo配置文件末尾加入以下配置:
# hexo-abbrlink config 、固定文章地址插件
abbrlink:
alg: crc16 #算法选项:crc16、crc32,区别见之前的文章,这里默认为crc16丨crc32比crc16复杂一点,长一点
rep: dec #输出进制:十进制和十六进制,默认为10进制。丨dec为十进制,hex为十六进制
Hexo配置文件中修改permalink如下:
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://blog.sky03.cn
root: /
permalink: posts/:abbrlink.html
permalink_defaults:
这样站点结构就变成了:域名/posts/xxx.html