前言
博客搭建起来了,但搜索引擎总搜不到,太没有成就感了。于是下一步要做的就是针对搜索引擎的优化,最终根据网上资料和自己遇到的实际情况,完成此博文。
本文主要分以下三个部分:
- 针对一般性的搜索引擎的优化配置
- sitemap 的生成和提交
- 百度搜索的优化配置及解决百度爬虫无法爬取 GitHub Pages 链接的问题
- 一般来说应该先阐述如何向搜索引擎提交链接,再来说明优化的。但在实际操作中发现,因为优化中包括文章链接的变动,已经提交的链接变得无法检索,所以先进行一些优化,再提交链接为好。
验证博客是否被收录
在谷歌或者百度的搜索链接中,使用以下格式可以直接搜索自己的域名,或者关键词 + 域名来更好地判断 , 如果能搜索到就说明已经被收录,反之则没有。可以直接搜索自己的域名,或者加一些关键词来更好地判断,例如
|
|
一般性优化
文章链接优化
Hexo 默认的文章链接形式为 domain/year/month/day/postname
,分级较多,造成 URL(Universal Resource Locator,统一资源定位符) 较长,不利于搜索引擎检索,我们可根据需要缩短 URL,将其改为 domain/postname
的形式。编辑站点配置文件_config.yml
, 将 permalink
字段改为 permalink: :title/
。
tips:
如果仍想在 URL 中保留时间要素,比如将 URL 改为 domain/year-month-day/postname
的形式,也可将permalink
字段改为 permalink: :year-:month-:day/:title/
首页标题优化
在主题目录下的主题配置文件 _config.yml
中新增 description
字段,后面添加你想为网站首页标题增加的描述 , 例如 description: xxxxx
, 更改 \themes\next\layout
目录下的 index.swig
文件,将代码
|
|
改为
此时网站首页标题会变成 网站名称-网站描述
的形式。
或者改为
此时网站首页标题会变成 网站关键词-网站名称-网站描述
的形式,theme.keywords
显示的是主题配置文件中 keywords
的内容。
不过个人喜欢首页标题简洁些,所以还是维持了默认的只显示网站名称的形式。
限制出站链接,增加 nofollow 标签
nofollow 标签是由谷歌领头创新的一个 “反垃圾链接” 的标签,并被百度、yahoo 等各大搜索引擎广泛支持,引用 nofollow 标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有 nofollow 属性的任何出站链接,以减少垃圾链接的分散网站权重!
安装以下插件,自动为文章添加 nofollow
标签
并在 站点配置文件
中添加以下字段
添加 robots.txt
robots.txt(统一小写)是一种存放于网站根目录下的 ASCII 编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。
在 source
目录下增加 rebots.txt
文件, 我参考的 robots.txt
代码如下,请将域名改为自己的网站
|
|
这样在下次部署博客时,robots.txt 就会被上传至网站了。稍后我们在提交 sitemap 时,可以顺便测试它是否被搜索引擎正确解析了。
sitemap 的生成和提交
sitemap 的生成
Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是 XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。
简言之, 网站地图 {Sitemap} 对于 搜索引擎优化 (英语:Search Engine Optimization,缩写为 SEO)非常重要,在网站中加入 Sitemap 有利于搜索引擎蜘蛛的抓取和收录。我们用安装以下两个插件来生成适用于谷歌和百度的 sitemap
|
|
并在 站点配置文件
中添加以下字代码
|
|
之后在执行 hexo g
后, public
目录下发现生成了 sitemap.xml
和 baidusitemap.xml
就表示配置成功了。
tips:
- 插件生成的 sitemap 的文章链接,都是以
站点配置文件
中的url
为基础的,如果将博客绑定了域名,那最好将url
字段填写为绑定的域名。 - 不想生成 sitemap 的页面,可在页面最上方以
---
分割的区域内,即Front-matter
中,添加代码sitemap: false
。
验证网站
在我们向搜索引擎提交 sitemap 之前,搜索引擎需要先验证我们对网站的所有权。
为什么要验证网站
标签与 标签之间。
站长平台推荐站长添加主站(您网站的链接也许会使用 www 和非 www 两种网址,建议添加用户能够真实访问到的网址),添加并验证后,可证明您是该域名的拥有者,可以快捷批量添加子站点,查看所有子站数据,无需再一一验证您的子站点。
如何验证网站
首先如果您的网站已使用了百度统计,您可以使用统计账号登录平台,或者绑定站长平台与百度统计账号,站长平台支持您批量导入百度统计中的站点,您不需要再对网站进行验证。
百度站长平台为未使用百度统计的站点提供三种验证方式:文件验证、html 标签验证、CNAME 验证。
1. 文件验证:您需要下载验证文件,将文件上传至您的服务器,放置于域名根目录下。
2.html 标签验证:将 html 标签添加至网站首页 html 代码的
3.CNAME 验证:您需要登录域名提供商或托管服务提供商的网站,添加新的 DNS 记录。
验证完成后,我们将会认为您是网站的拥有者。为使您的网站一直保持验证通过的状态,请保留验证的文件、html 标签或 CNAME 记录,我们会去定期检查验证记录。
两个搜索引擎提交的入口分别为:
Google Search Console
百度站长平台
验证的方法很多,我两个搜索引擎均采用 文件验证
的方法。Google 添加链接后,会自动跳转至验证页面,供我们下载 HTML 验证文件。
百度需要提交链接后,点击 验证网站所有权,下载 HTML 验证文件。
将下载的验证文件在 source
目录下。 为了使 hexo 不处理这两个验证文件,并且不生成关于这两个文件的 sitemap,我们需要打开验证文件,在最上面添加以下代码
|
|
执行 hexo 部署命令
|
|
之后,就可以查看验证是否通过了。
提交 sitemap
向谷歌提交
向谷歌提交 sitemap 比较简单,登录 Google Search Console ,选择已经验证过的站点,在抓取
-> 站点地图
中,右上角可看到 添加 / 测试站点地图
,添加 sitemap.xml
的链接即可,谷歌效率较高,一般当天或者第二天就能搜到微博了。
tips:
- 需要注意的是,在生成 sitemap 时,要屏蔽掉谷歌和百度的验证文件 (方法见上文 ‘sitemap 的生成 ‘ tips), 否则谷歌在检测 sitemap 时报错。
- 另外可以在
抓取
->robots.txt 测试工具
中点击测试,测试添加的 robots.txt 是否已经成功。
向百度提交
与谷歌类似,我们可以直接向百度交 sitemap,登录 百度站长平台,点击 网页抓取
-> 链接提交
,在 自动提交
中选择 sitemap
,输入自己的域名加 baidusitemap.xml 即可,比如我的是 http://www.yuan-ji.me/baidusitemap.xml 。 之后可查看 url 提取是否成功。
tips:
和谷歌不同,百度提交了链接也不一定收录,要不断提升文章质量和数量才行。
百度相关的搜索配置
由于 GitHub 屏蔽了百度的爬虫,即使提交成功,百度知道这里有可供抓取的链接,也不一定能抓取成功。 首先我们先检测一下百度爬虫是否可以抓取网页。在百度站长平台网页抓取
->抓取诊断
中,选择PC UA
点击抓取 , 查看抓取状态, 如果显示 抓取失败
, 则需要进一步的配置。
tips:
选择 移动 UA
抓取一般都是会成功的。
主动推送和自动推送
百度提供了多种链接提交的方式
如何选择链接提交方式
1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
2、自动推送:最为便捷的提交方式,请将自动推送的 JS 代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
3、sitemap:您可以定期将网站链接放到 sitemap 中,然后将 sitemap 提交给百度。百度会周期性的抓取检查您提交的 sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
4、手动提交:一次性提交链接给百度,可以使用此种方式
我们可以综合使用,互为补充。
自动推送
next 主题已经部署了自动推送的代码,我们只需在主题配置文件
中找到 baidu_push
字段 , 设置其为 true
即可。
主动推送
为使用主动推送,需要安装插件 , 参考官方说明 Hexo 插件之百度主动提交链接
首先,在 Hexo 根目录下,安装本插件:
1 npm install hexo-baidu-url-submit --save然后,同样在根目录下,把以下内容配置到 _config.yml 文件中:
12345 baidu_url_submit:count: 3 ## 比如 3,代表提交最新的三个链接host: www.hui-wang.info ## 在百度站长平台中注册的域名token: your_token ## 请注意这是您的秘钥, 请不要发布在公众仓库里 !path: baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里其次,记得查看 _config.ym 文件中 url 的值, 必须包含是百度站长平台注册的域名(一般有 www), 比如:
1234 # URLurl: http://www.hui-wang.inforoot: /permalink: :year/:month/:day/:title/最后,加入新的 deployer:
12 deploy:- type: baidu_url_submitter执行 hexo deploy 的时候,新的连接就会被推送了。
tips:
百度每天主动提交的链接数量是有限制的
主动推送可以推多少条链接?
答:主动推送可提交的链接数量上限是根据您提交的新产生有价值链接数量而决定的,百度会根据您提交数量的情况不定期对上限额进行调整,提交的新产生有价值链接数量越多,可提交链接的上限越高。主动推送是否成功会在执行
hexo deploy
时显示,success
后的数字为主动推送成功的链接数
Coding.net 镜像部署
还有一个解决思路是,利用 Coding.net 提供的 Coding Pages 功能另外部署一个镜像,让百度爬虫访问此镜像,普通用户还是访问位于 Github Pages 的页面。
注册 Coding.net 账号
首先在注册 Coding.net 账号, 创建用户 Pages , 并绑定自己的域名,此处请参考 官方帮助文档。
修改域名绑定
登录自己的域名解析的控制台, 将指向 pages.coding.me 的解析的线路类型设为 百度。
主机记录 | 记录类型 | 线路类型 | 记录值 |
---|---|---|---|
www | CNAME | 百度 | pages.coding.me |
这样就为百度专门开了一条线路。
增加页面跳转
Coding Pages 与 GitHub Pages 不同的一点是,即使绑定了域名,当用户直接访问 Coding.net 分配给自己的二级域名时,却不能跳到已绑定的域名。比如在访问 yuan-ji.coding.me 时,并不能跳转到 www.yuan-ji.me。为了避免用户误访问了 Coding Pages 的镜像,我们需要增加一段跳转代码。
在位于 themes/next/layout/_partials/
的 head.swig
文件中,最后位置添加如下代码,
这样当用户在浏览器访问镜像时,会直接跳到我们在 GitHub 的页面,同时又不会影响百度爬虫。
在站点配置文件
中增加新的 deployer
|
|
这样每次在执行部署时,博客会同时部署到 GitHub 和 Coding.net 的镜像上。
更新 Robots
登录百度站长平台 , 点击 网页抓取
->Robots
-> 检测并更新
。 这样百度爬虫会检测并更新 robots.txt, 并会在新的 ip 地址上抓取内容,不然还是会抓取原来的 GitHub 上的 ip 地址,导致抓取失败。更新完成后,我们再次在抓取诊断
中测试,这时应该就会抓取成功了。
tips:
如果之前已经上传过 robots.txt 导致更新不成功的话,可以试着删除 robots.txt, 重新上传。
小结
我最终三种方式混合使用,数据连接提交效果如下。
感慨一下,百度搜索提交实在是太过繁琐了,相比之下,谷歌搜索提交真是方便又有效率。
参考链接
Hexo SEO优化
动动手指,不限于NexT主题的Hexo优化(SEO篇)
hexo干货系列:(六)hexo提交搜索引擎(百度+谷歌)
URL网址统一修正
使用 Hexo 搭建博客的深度优化与定制
Hexo NexT 主题SEO优化指南
Hexo插件之百度主动提交链接
Hexo 博客添加百度sitemap
解决 Github Pages 禁止百度爬虫的方法与可行性分析