你已经成功了,成功的人不需要流弱者的眼泪。
个人对HEXO搭建博客的SEO优化方案进行总结,从本地的文章结构到定期推送,再到SEO关键词优化做一个全面体系的汇总,如果有更好的方法可以私聊我。

本地文章优化

添加sitemap

首先给你的文章生成sitemap文件
npm install hexo-generator-sitemap --save #sitemap.xml适合提交给谷歌搜素引擎 npm install
hexo-generator-baidu-sitemap --save #baidusitemap.xml适合提交百度搜索引擎
然后在站点配置文件_config.yml中添加以下代码
# 自动生成sitemap sitemap: path: sitemap.xml baidusitemap: path: baidusitemap.xml
最后修改站点配置文件_config.yml
# URL ## If your site is put in a subdirectory, set url as
'http://yoursite.com/child' and root as '/child/' url: http://你的网站
每次hexo g后都会在/public目录下生成sitemap.xml和baidusitemap.xml,这就是你的站点地图。

优化结构


seo搜索引擎优化认为,网站的最佳结构是用户从首页点击三次就可以到达任何一个页面,但是我们使用hexo编译的站点打开文章的url是:sitename/year/mounth/day/title四层的结构,这样的url结构很不利于seo,爬虫就会经常爬不到我们的文章,于是,我们可以将url直接改成sitename/title的形式,并且title最好是用英文,在根目录的配置文件下修改permalink如下:
url: http://你的网站 root: / permalink: :title.html permalink_defaults:
首页标题优化

SEO最重要的是你的标题,一般搜索都是搜索你的标题。

更改index.swig文件(your-hexo-site\themes\next\layout);

将下面这段代码:
{% block title %} {{ config.title }} {% endblock %}
改成:
{% block title %} {{ config.title }} - {{ theme.description }} {% endblock %}
这时候你的首页会更符合网站名称 - 网站描述这习惯。

进阶,做了seo优化,把关键词也显示在title标题里,可改成:
{% block title %} {{ theme.keywords }} - {{ config.title }}{{
theme.description }} {% endblock %}
注意:别堆砌关键字,整个标题一般不超过80个字符,可以通过chinaz的seo综合查询检查。

关键词与描述

搜索引擎除了主要抓取标题外,页面的关键词和描述也会抓取。

在\scaffolds\post.md中添加如下代码,用于生成的文章中添加关键字和描述。
keywords: description:

在\themes\next\layout_partials\head.swig有如下代码,用于生成文章的keywords。暂时还没找到生成description的位置。
{% if page.keywords %} <meta name="keywords" content="{{ page.keywords }}" />
{% elif page.tags and page.tags.length %} <meta name="keywords" content="{% for
tag in page.tags %}{{ tag.name }},{% endfor %}" /> {% elif theme.keywords %}
<meta name="keywords" content="{{ theme.keywords }}" /> {% endif %}
然后在\themes\next\layout_macro\post.swig中找到这个位置:
{% if post.description %}
将以下代码去掉:
{% if post.description %} {{ post.description }} <div class="post-more-link
text-center"> <a class="btn" href="{{ url_for(post.path) }}"> {{
__('post.read_more') }} » </a> </div>
否则首页的文章摘要就会变成文章的description。

举个例子:
--- title: HEXO SEO优化方法总结 copyright: true top: 0 date: 2018-07-19 21:17:42
tags: SEO categories: Debian permalink: password: keywords: [HEXO,HEXO SEO优化]
description: 总结一下使用Hexo搭建博客后,SEO优化方案的总结,后期会不定期更新。 ---
nofollow 标签

给非友情链接的出站链接添加 “nofollow”
标签,nofollow标签是由谷歌领头创新的一个“反垃圾链接”的标签,并被百度、yahoo等各大搜索引擎广泛支持,引用nofollow标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有nofollow属性的任何出站链接,以减少垃圾链接的分散网站权重。

以hexo的NexT主题为例,需要修改两处

一:找到footer.swig,路径在your-hexo-site\themes\next\layout_partials,将下面代码



改成:



将下面代码:
<a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
改成:
<a class="theme-link" href="https://github.com/iissnan/hexo-theme-next"
rel="external nofollow">
二:修改sidebar.swig文件,路径在your-hexo-site\themes\next\layout_macro,将下面代码
<a href="{{ link }}" target="_blank">{{ name }}</a>
改成:
<a href="{{ link }}" target="_blank" rel="external nofollow">{{ name }}</a>
将下面代码:
<a href="http://creativecommons.org/licenses/{{ theme.creative_commons }}/4.0"
class="cc-opacity" target="_blank">
改成:
<a href="http://creativecommons.org/licenses/{{ theme.creative_commons }}/4.0"
class="cc-opacity" target="_blank" rel="external nofollow">
安装nofollow插件

减少出站链接能够有效防止权重分散,hexo有很方便的自动为出站链接添加nofollow的插件。
npm install hexo-autonofollow --save
该插件会将博客中的出站链接自动加上nofollow属性,例外请在站点配置文件_config.xml中添加如下字段
nofollow: enable: true exclude: - www.langzi.fun - 友链地址
这样,例外的链接将不会被加上nofollow属性。

robots.txt文件

在source文件夹中新建文件robots.txt,可以参考我的:
User-agent: * Allow: / Allow: /archives/ Disallow: /vendors/ Disallow:
/categories/ Sitemap: http://www.langzi.fun/sitemap.xml Sitemap:
http://www.langzi.fun/baidusitemap.xml
开启SEO优化选项


hexo博客next提供了seo优化选项,在主题配置文件_config.yml中有个选项是seo,默认是false,改成true即开启了seo优化,会进行一些seo优化,如改变博文title等,然后相同文件下有个关键字选项keywords,填充上,写博文时最好每篇博文都加上keywords。

我用的是next的主题,把该主题的_config.yml的默认keyword改成你的网址关键词
# Set default keywords (Use a comma to separate) keywords: "langzi"
开启压缩文件

因为hexo生成的文件是静态html,里面占用了大量的空白符。使用gulp进行压缩接口提高访问速度并且降低内存。

使用命令
npm install gulp -g npm install gulp-minify-css gulp-uglify gulp-htmlmin
gulp-htmlclean gulp --save npm install gulp-concat npm install gulp-imagemin
在hexo blog文件夹下创建gulpfile.js:
var gulp = require('gulp'), uglify = require('gulp-uglify'), cssmin =
require('gulp-minify-css'), imagemin = require('gulp-imagemin'), htmlmin =
require('gulp-htmlmin'), htmlclean = require('gulp-htmlclean'); concat =
require('gulp-concat'); //JS压缩 gulp.task('uglify', function() { return
gulp.src(['./public/js/**/.js','!./public/js/**/*min.js'])//只是排除min.js文件还是不严谨,一般不会有问题,根据自己博客的修改我的修改为return
gulp.src(['./public/**/*.js','!./public/zuoxi/**/*.js',,'!./public/radio/**/*.js'])
.pipe(uglify()) .pipe(gulp.dest('./public/js'));//对应修改为./public即可 });
//public-fancybox-js压缩 gulp.task('fancybox:js', function() { return
gulp.src('./public/vendors/fancybox/source/jquery.fancybox.js') .pipe(uglify())
.pipe(gulp.dest('./public/vendors/fancybox/source/')); }); // 合并 JS
gulp.task('jsall', function () { return gulp.src('./public/**/*.js') // 压缩后重命名
.pipe(concat('app.js')) .pipe(gulp.dest('./public')); });
//public-fancybox-css压缩 gulp.task('fancybox:css', function() { return
gulp.src('./public/vendors/fancybox/source/jquery.fancybox.css')
.pipe(cssmin()) .pipe(gulp.dest('./public/vendors/fancybox/source/')); });
//CSS压缩 gulp.task('cssmin', function() { return
gulp.src(['./public/css/main.css','!./public/css/*min.css']) .pipe(cssmin())
.pipe(gulp.dest('./public/css/')); }); //图片压缩 gulp.task('images', function() {
gulp.src('./public/uploads/*.*') .pipe(imagemin({ progressive: false }))
.pipe(gulp.dest('./public/uploads/')); }); // 压缩 public 目录 html文件
public/**/*.hmtl 表示public下所有文件夹中html,包括当前目录 gulp.task('minify-html', function()
{ return gulp.src('./public/**/*.html') .pipe(htmlclean()) .pipe(htmlmin({
removeComments: true, minifyJS: true, minifyCSS: true, minifyURLs: true, }))
.pipe(gulp.dest('./public')) }); gulp.task('build', ['uglify', 'cssmin',
'fancybox:js', 'fancybox:css', 'jsall','images']); //, 'minify-html'
在根目录下的package.json文件中生成写入scripts:
"scripts": {
“build”: “hexo clean && hexo g && gulp build ”
}

这样每次输入npm run build就会自动清理上次生成的文件,然后生成新的文件,最后压缩文件。

开启推送

将网站链接提交到百度,百度搜索引擎提交入口 <http://www.sousuoyinqingtijiao.com/baidu/tijiao/>
,然后验证你的网站,这一点网上有很详细的教程我就不复述了,验证确认你的网站后,继续验证你的网站的robots.txt和sitemap文件是否可用,一般都是可用的。

然后就可以开始推送了,基本上推送有三种方式:主动推送>自动推送>sitemap三种,一般主动提交比手动提交效果好。

自动推送

把下面的代码放到D:\lang_blog\themes\next\source\js\src目录下,文件名为bai.js
<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>
然后在D:\lang_blog\scaffolds目录下的post.md文件(模板文件中加入这么一行)
<script type="text/javascript" src="/js/src/bai.js"></script>
这样只要访问你的这个页面,就会自动向百度推送你的这个网页。

手动推送

用Python写了一个自动推送的脚本,首先你要在百度站长平台获取你的网址的token


#coding:utf-8 import requests import time from bs4 import BeautifulSoup as bp
print unicode('Langzi.Fun 自动推送开启....','utf-8') time.sleep(0.5) site_url =
'http://www.这里改写成你的网站.com/baidusitemap.xml' try: print unicode('Langzi.Fun
获取sitemap链接....','utf-8') data_ = bp(requests.get(site_url).content,'lxml')
except Exception.e: print e list_url=[] def get_(data):
headers={'User-Agent':'curl/7.12.1 ', 'Content-Type':'text/plain '} try: r =
requests.post(url='http://data.zz.baidu.com/urls?site=www.这里改写成你的网站.com&token=这里改写成你的token',data=data)
print r.status_code print r.content except Exception,e: print e print
'---------------------------------' for x,y in
enumerate(data_.find_all('loc')): print x,y.string
list_url.append(y.string.replace('http://','http://www.')) print
'---------------------------------' print unicode('Langzi.Fun
开始推送....','utf-8') for x in list_url: print unicode('Langzi.Fun
当前推送条目为:','utf-8') + x get_(x)
修改完后双击启动一次即可,每次写完文章后,都启动推送一次。已经使用主动推送的站点,依然可以部署自动推送的JS代码,二者一起使用。

获取关键词


现在搜关键词全是广告,其实百度已经提供了一个接口,每次使用过百度搜索的时候下面的下拉条会出现一堆相关的关键词,这下关键词的权重是非常高的,采集这些关键词然后用在自己的文章中效果还可以,但是要记住不能堆砌关键词。

接口:
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=
比如:
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=langzi
搜过结果:

window.baidu.sug({q:"langzi",p:false,s:["浪子彦","朗姿女装","朗姿","朗姿唯品会","浪子彦直播","浪子心声","浪子","浪子回头","朗姿股份","浪子燕青"]});
一般回显10个关键词

提取代码如下:
#coding:utf-8 import requests import time print unicode('Langzi.Fun
关键词采集开启....','utf-8') #time.sleep(0.5) key =
raw_input(unicode('输入关键词:','utf-8')) site_url =
'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=' + (str(key)) r =
requests.get(site_url) print
r.content.replace('window.baidu.sug({q:','').replace('});','').replace(',p:false,s:','').replace('"','').replace(str(key),'')
网上也有很多百度下拉框工具,可以去找一下。

站内优化

这里就真正的涉及到SEO的相关知识了,对你的文章的结构,描述,关键词进行优化。

title优化


搜索引擎在抓取网页时,最先读取的就是网页标题,所以title是否正确设置极其重要。title一般不超过80个字符,而且词语间要用英文“-”隔开,因为计算机只对英语的敏感性较高,对汉语的敏感性不高。
用法:<title>网站标题</title>
注意点:

*
首页title写法:首页的title写法格式一般是“总标题-特别重要的关键词或者一句话含有特别重要关键词的描述”。注意这里的“-”是英文,要问我为什么呢?这个因为互联网不是我们国内开发的,汉语不是标准,计算机只对英语敏感性较高,而对汉语敏感性不太高。
* 栏目页title写法:栏目页title的写法有两种,关键词名称命名写法是“栏目名称-总名称”,非关键词命名写法是:“栏目名称 栏目关键词-总名称”。
* 分类列表页的title写法:用关键词为这个栏目起名,然后按照下列顺序填写便可了“分类列表页名称-栏目名称-总名称”。
注意事项:

* 每个标题应该是根据当前内容设置的独特不重复的。
* 字数限制。不能太长,要不然搜索引擎结果列表会显示不全。最好不超过 25 个中文字。最好是在 10~20 之间。
* 切勿堆砌关键词。这是很多人常犯的错误
* 关键词最好出现在最前面
* 标题有吸引力。毕竟有吸引力的标题才能让用户点击
* 连词符的使用。可以使用 |->
* 不要使用没有意义的句子
keywords优化


主要作用是告诉搜索引擎,这个网站内容是什么。因为,好多站长在keywords堆砌关键词,所以好多搜索引擎不太重视keywords了。建议大家还是认真填写keywords,有的搜索引擎还是很重视的,由于现在词频和密度对于
SEO 影响不大,所以只要保持你的正文中出现 4~6 次关键词就可以了。千万不能堆砌关键词。

注意点:

* 首页keywords写法:首页keywords按照选定的栏目名称,在首页的keywords中加入总名称、栏目名称和一两个关键词。
* 栏目keywords写法:栏目的keywords其栏目下所有分类列表的名称列出,加上栏目关键字,写法是“栏目名称,栏目关键字,栏目分类列表名称”
* 分类列表页keywords写法:将你这个栏目中的主要关键字写入。
Description优化


功能让搜索引擎是判断整个页面内容的,当中要写入的内容是你页面内容的简介。description一般不超过100个字符。对于个人站点而言,描述标签最好是一句通顺的句子,如果不能的话,则宁可不要。

注意点:

* 首页description写法:description的写法就是将首页的标题、关键词和一些特殊栏目的内容融合到里面,写成简单的介绍形式,不要只写关键词。
* 栏目description写法:将栏目的标题、关键字、分类列表名称,尽量的写入description中,仍是尽量写成介绍形式。
* 分类description写法:是将你这个栏目中的主要关键字写入。
H标签优化

H 标签的重要性可能是仅次与页面标签。H1->H6 的重要性依次降低。

所以建议在页面的 H1 和 H2 标签中混入关键词

图片 ALT 文字优化

插入图片的时候会提示输入文字,这个不能敷衍。图片 ALT 文字出现的关键词对页面相关性也有一定的影响。同样的,也不要在 ALT 上堆砌关键词。

内部链接及锚文字优化

内部链接对于爬行和收录具有很重要的意义。内部链接对页面关键词相关性也有影响,最主要的就是在内部链接中使用锚文字。

锚文字是告诉搜索引擎被链接页面主题内容的最重要依据之一。我们有时候可能无法控制外部链接的锚文字,但是对于站内的内部链接锚文字我们可以控制。不过有几点需要注意:

* 适当出现匹配关键词的锚文字
* 锚文字不能集中导航或者页尾,要分散在正文中
* 不要过度优化锚文字,要不然有可能会被搜索引擎惩罚
个人博客:www.langzi.fun
欢迎交流Python开发,安全测试。

参考文章:

个人博客 SEO 优化 <https://blog.csdn.net/qq673318522/article/details/79939185>

hexo SEO <https://blog.csdn.net/zaoan_wx/article/details/50859675>

Hexo Seo优化 <https://www.jianshu.com/p/86557c34b671>

hexo 主题优化 <https://www.jianshu.com/p/3ff20be8574c>

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信