Github(google提交)+Coding(百度提交),自适应提交搜索引擎(绝招来啦!)

摘要

如果您看到这篇文章却没有离开,相信您已经建立你的Hexo博客,但是在百度搜索或者Google的搜索引擎无法搜索到你的博客内容,没关系,本篇文章将为你带来详细的两个搜索引擎的提交方法和技巧,相信通过本文你将会建立起一个完整的搜索引擎提交体系。如果你需要了解更多的Hexo建站内容,点击以下链接,获取相关资料。
HEXO-建站系列
HEXO-优化系列
HEXO-进阶系列


正文

检查网站收录

通常你会想了解你的网站的收录情况如何,使用以下命令确认博客的收录状态:

1
site:你的网站域名(如joryhe.github.io)

百度雷同,就不贴出来啦!

网站验证

如果您的博客还没有进行相关搜索引擎的验证,参照以下操作可以协助在搜索引擎您验证的你网站,
列出Google和百度的网站验证链接:
Google上搜索引擎
百度搜索引擎

为什么要验证

验证主要是方便百度了解的网站,其次你需要的百度统计等功能都需要验证后才能使用

验证手段

  • [x] 文件验证(简单方便,推荐使用)
  • [] html标签验证
  • [] CNAME验证

文件验证:您需要下载验证文件,将文件上传至您的服务器,放置于域名根目录下
html标签验证:将html标签添加至网站首页html代码的

标签与标签之间
CNAME验证:您需要登录域名提供商或托管服务提供商的网站,添加新的DNS记录。

本人推荐的验证手段是文件验证
操作方式如下:

验证文件的放置位置(建议在编译完后放到Pubilc根目录在提交,由于编译会更改验证文件的内容)导致验证失败,其次Google的操作方式雷同。当然你也可以放到主站点目录的source下,但是你需要修改验证文件如下(添加layout: False禁止Hexo编译转换):
Google验证文件

1
2
3
layout: false
---
google-site-verification: googlee8f47d983650c060.html

百度验证文件

1
2
3
layout: false
---
KAy0GB8nPs

你还可以通过配置主站点配置文件_config.yml来实现避免特定文件的被编译
修改如下:(多文件方式)

code
1
2
3
4
skip_render: 
- baidu_verify_KAy0GB8nPs.html
- googlee8f47d983650c060.html
- baidusitemap_zhanwei.xml

修改如下:(多目录方式)

请注意yml中的文件格式,输入单个数据请注意空格,输入数组请进行缩进
单个文件夹下全部文件:skip_render: test/
单个文件夹下指定类型文件:skip_render: test/
.html
单个文件夹下全部文件以及子目录:skip_render: test/**

多个文件夹以及各种复杂情况

code
1
2
3
skip_render:
- test1/*.html
- test2/**

推送方式

如何选择链接提交方式
1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
2、自动推送:最为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
3、sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
4、手动提交:一次性提交链接给百度,可以使用此种方式

效率:主动推送>自动推送>sitemap

站点地图推送

站点地图的作用是有利于搜索引擎的捉取你的文章信息。站点地图是保存你网站文章链接的文件,通常搜索引擎会读取此文件进行文章信息的捉取,建立一个完整的站点地图有利于搜索引擎的捉取。需要实现百度和Google的地图的生成,你需要安装对应的HEXO插件。

插件安装

分别使用以下命令来安装针对百度和Google的地图插件

1
2
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save

配置站点配置文件

配置站点配置文件_config.yml,启用相应插件

1
2
3
Plugins:
- hexo-generator-sitemap
- hexo-generator-baidu-sitemap

配置站点地图文件

1
2
3
4
5
#sitemap
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml

编译运行

1
hexo g

当你成功编译并在Public目录下生成对应的baidusitemap.xml(针对百度),sitemap.xml(针对Google)表明你已经成功建立的站点地图。但是存在以下问题,当你使用Coding和Github两个托管平台搭建博客时,你会发现两个站点地图的域名相同,但是这样并不是我们所希望的,我们希望是baidusitemap.xml生成的域名对应的是coding.me的域名,而sitemap.xml对应的是Github的域名。这样才能实现对应搜索引擎收录对应的站点地图。如何实现 看绝招,绝招来啦

技巧实现(绝)

在实现之前,我们先来了解的一下站点生成站点题图的原理:其实就是根据站点配置文件下的url所定义域名去生成对应的站点地图,导致百度和Google的站点地图的域名相通。本人经过辛苦查找,发现百度站点hexo-generator-baidu-sitemap插件的基本机制,通过修改插件的部分代码和结合主站点配置文件实现不同域名下的站点地图生成。

实现代码

修改Hexo 根目录下的node_modules\hexo-generator-baidu-sitemap\baidusitemap.ejs此文件包含
如和实现生成对应站点地图的对应代码
原始代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% var url = config.url + config.root %>
<% posts.forEach(function(post){ %>
<% if(post.categories){%>
<url>
<loc><%- encodeURI(url + post.path) %></loc>
<lastmod><%= post.updated.toDate().toISOString() || post.date.toDate().toISOString() %></lastmod>
<data>
<display>
<title><%-: post.title %></title>
<pubTime><%= post.date.toDate().toISOString() %></pubTime>
<%if(post.tags){ post.tags.toArray().forEach(function(tag){ %>
<tag><%= tag.name %></tag>
<% })}/*%>
<content><%-: post.content%></content>
<% */%>
<%if(post.tags && post.categories){ %>
<% post.categories.toArray().forEach(function(category,index){ %>
<% if(index < 3){ %>
<breadCrumb title="<%= category.name %>" url="<%- encodeURI(url + category.path) %>"/>
<%}})} %>
</display>
</data>
</url>
<%}}) %>
</urlset>

修改后的代码:
你需要修改对应的config.url为你的config.coding_url

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% var url = config.coding_url + config.root %> #修改的代码位置config.coding_url
<% posts.forEach(function(post){ %>
<% if(post.categories){%>
<url>
<loc><%- encodeURI(url + post.path) %></loc>
<lastmod><%= post.updated.toDate().toISOString() || post.date.toDate().toISOString() %></lastmod>
<data>
<display>
<title><%-: post.title %></title>
<pubTime><%= post.date.toDate().toISOString() %></pubTime>
<%if(post.tags){ post.tags.toArray().forEach(function(tag){ %>
<tag><%= tag.name %></tag>
<% })}/*%>
<content><%-: post.content%></content>
<% */%>
<%if(post.tags && post.categories){ %>
<% post.categories.toArray().forEach(function(category,index){ %>
<% if(index < 3){ %>
<breadCrumb title="<%= category.name %>" url="<%- encodeURI(url + category.path) %>"/>
<%}})} %>
</display>
</data>
</url>
<%}}) %>
</urlset>

修改主站点配置文件_config.yml,定义coding_url = 你的名字.coding.me.

1
2
3
4
5
6
7
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://joryhe.github.io/
coding_url: http://joryhe.coding.me #修改位置
root: /
permalink: :year/:month/:day/:title.html
permalink_defaults:

总结:通过以上部分的修改,你会发现生成的站点地图就会对应你的域名百度是coding.me,Google为Github的域名。从此你不在为域名的更换而烦恼。真实绝招一个阿!。

收录站点地图

Google推送

登录Google账号,添加了站点验证通过后,选择站点,之后在抓取——站点地图中就能看到添加/测试站点地图,如下图:

百度推送

点击网页捉取->链接提交

自动推送

自动推送你仅需要简单的添加以下代码可以实现:
修改themes\next\layout\_partials\footer.swig 添加如下代码

1
2
3
4
5
6
7
8
<script>
(function(){
var bp = document.createElement('script');
bp.src = '//push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

问题:在Github网站也会进行这样的推送,显然不合理,百度并不会收录GitHub的域名网站所以
你可以按照的我的操作,简单设置一下JS代码判断你的域名从而实现是否执行你的百度推送代码
新的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
  host3 = window.location.href;
chinadomai3 = "http://joryhe.coding.me/"; #修改为你的百度推送对应的域名
if (host3.indexOf(chinadomain3)!=-1) {

(function(){
var bp = document.createElement('script');
bp.src = '//push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();

}

结语

如果你还需要了解更多技术文章信息,请继续关注Jory博客

看一看,共同关注,共同分享与讨论!