静态博客框架比较

overview

比较流行的一些静态博客框架,比较流行的有Jekyll,Hexo,Simple,Octopress,Pelican以及Lo·gecho等等.

  • Hexo(Node.js写的,编译速度比前两者快)

    优势:轻量静态博客,与以上相比速度更快,适合博客内容很多的用户。可以从多个平台(比如wp,joomla)移植博客。可以使用绝大多数octopress插件

    缺点:需要在本地更新博客

    安装:较简单

  • Jekyll 更活跃,github官方指定。像黑客一样写作。可以通过http://prose.io直接写博客。

    缺点: 模板基于liquid template engine,更改较复杂,安装稍复杂

    Jekyll的一个最大优势 :Github自动构建和部署,用户基本只需维护md文件;而hexo等博客需要本地编译成html,然后再上传到Github。


    Github原文

    Jekyll’s simplified build process with GitHub Pages is one of the biggest advantages of using Jekyll instead of other static site generators. GitHub Pages manages your site’s build process with a single push to your site’s publishing branch.

    – 来自 Github官网 https://help.github.com/articles/about-github-pages-and-jekyll/


  • Hakyll Haskell

    示例: http://colah.github.io

    为什么都喜欢ll结尾?
  • Octopress Jekyll的再开发
jekyll hexo
contributor 751 115
star 32983 20441

搜索 hexo 迁移 jekll,搜到的都是
从Jekyll迁移到Hexo, why?

https://acris.me/ 的title字体

参考

Hexo简介

Hexo剖析

中文文档:https://hexo.io/zh-cn/docs/
官方主题库:https://hexo.io/themes/
next主题:https://github.com/theme-next

Hexo原理综述

markdown到html的旅程

  • 模板渲染
  • 模板渲染

hexo文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├── _config.yml     # 站点配置文件
├── db.json # database,缓存文件
├── node_modules # 安装的插件以及hexo所需的一些node.js模块
├── package.json # 应用程序信息,配置hexo运行需要的js包
├── public # deploy时生成,最终所见网页的所有内容
├── scaffolds # 模板文件夹,hexo默认包含以下三种布局(layout) https://hexo.io/zh-cn/docs/writing.html
│ ├──draft.md # hexo new draft <title> 会在source/_drafts目录下生成md文件
│ ├──page.md # hexo new page <title> 在source目录下
│ └──post.md # hexo new post <title> 在source/_posts目录下生成md文件
├── source # 资源文件夹。除 posts 文件夹之外,开头命名为 (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。
│ ├── _draft # 除 _posts 文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略
│ └── _posts #
│ └── hello-world.md
└── themes #主题文件夹
├──
└──next
├──
├──
├──
├──

详解clean

1
2
3
4
$ hexo clean --debug

INFO Deleted database. # 清空 db.json
INFO Deleted public folder. # 删除public目录

详解hexo g

每次运行 hexo g 命令,hexo(node.js程序)会遍历你的 source 目录,建立索引,根据你 theme 文件夹的主题生成页面到 public 文件夹。这时 public 文件夹就是一个纯由 html javascript css 等内容制作的博客,而这些恰好能在 git pages 识别

详解deploy

最后 hexo d 将 public 文件夹的内容复制到临时目录,以 git 方式 push 到 github 的指定项目的指定分支,由 github 进行显示

首次deploy

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
28
29
30
31
32
33
34
35
$ hexo d --debug

# 1. 首先加载plugin和theme
DEBUG Config loaded: ~/xs/blog/_config.yml
DEBUG Plugin loaded: hexo-generator-category

# 2. 开始转化html
INFO Start processing

# 2.1 处理404页面
DEBUG Processed: source/404.html # 404不需要theme
DEBUG Processed: 404.html

# 2.2 加载主题,处理source目录下的.md .html
DEBUG Theme config loaded.
DEBUG Processed: _config.yml # 这个也需要处理?
DEBUG Processed: source/css/main.styl # 处理source目录下所有文件,包括js image md
DEBUG Processed: layout/archive.swig # 处理layout languages等

DEBUG Generator: page # 还包括post category archive index tag

# 3. 生成html,存储在public目录
INFO Files loaded in 796 ms #
DEBUG Rendering page: 404.html
DEBUG Rendering post: 2018/01/25/hello-world/index.html
DEBUG Rendering archive: archives/index.html
DEBUG Rendering index: index.html

# 4. deploy: 创建git repo,在public中拷贝文件,并push
INFO Deploying: git
Initialized empty Git repository # git init
INFO Copying files from public folder... # 从public复制到.deploy_git目录
INFO Copying files from extend dirs...
INFO Deploy done: git # commit & push 已完成
DEBUG Database saved

详解hexo server

hexo s –debug

hexo的模板引擎,Rendering HTML

模板引擎的作用,就是将界面与数据分离。最简单的原理是将模板内容中指定的地方替换成数据,实现业务代码与逻辑代码分离。

source 文件夹理解为数据库,而theme文件夹相当于 界面。 hexo g 就将我们的数据和界面相结合生成静态文件 public。

Hexo 的模板引擎是默认使用 ejs 编写的,同类型的东西还有很多,比如jade,swig。

next选用的swig

比较赞的设计

  • 文件名与博客名分离,即title不直接采用文件名。(这样保证了不会因为title的变动引起url的变动)
  • url路径与实际路径分离 ()

reference

http://coderunthings.com/2017/08/20/howhexoworks/

【hexo系列】hexo的正确打开方式

背景

核心思想

  • 利用submodule管理blog
    • 先fork再add submodule
  • 利用branch管理自己的project和需要PR的project

实现细节

  • 主仓库 blog
    • themes/next/ 每个theme是一个子仓库
    • source/post/ 作为一个子仓库
    • source/image/ 作为一个子仓库

模块搭建&整合流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. fork hexo-starter 作为blog主仓库
$ git clone --recursive git@github.com:esblog/hexo-starter.git blog

# 2. 添加 submodule
# 2.1 fork theme & add submodule
$ cd blog/themes/
$ git submodule add git@github.com:esblog/hexo-theme-next.git next

# 2.2 fork _post & add submodule
$ git submodule add git@github.com:esblog/_posts.git


# 2.3 fork project-u-like & add submodule
$ mkdir blog/source/games/ && cd blog/source/games/
$ git submodule add git@github.com:esblog/2048.git

# 检查是否添加成功
$ vi .gitmodules

# 3. push到blog主仓库 (整合)
cd blog/
git commit -m "add submodules hexo-theme-next source/_post games/2048"
git push -u origin master

Note: 如果你嫌fork太多,那么可以开一个github小号,管理这些fork。
github主账号只放deploy版本。

实例:

常用操作

push

  • 每个module独立push
1
2
3
4
5
6
7
# 1. commit changes from all submodules (e.g. _posts)
$ cd _posts
$ commit & push

# 2. commit changes from esblog.github.io
$ cd blog
$ commit & push

pull & merge

1
$ git pull && git submodule init && git submodule update && git submodule status

clone & setup

1
2
3
4
5
6
7
# master用于Gitpage的部署
$ git clone -b dev --recursive git@github.com:esblog/esblog.github.io.git blog-dev
$ cd blog-dev
$ git branch # 确认已经切换到dev分支
$ npm install hexo --save # install node_modules dependency
$ hexo s
$ hexo d

其他操作

从官方更新模块(操作较少)

比如,theme-next有些新功能 如何更新到自己的博客中?

1
2
$ git pull https://github.com/theme-next/hexo-theme-next.git
# 如果有冲突,需要人工merge

也可在theme的github界面pull & merge

其他操作建议

  • 每个post都加date,不然每次编辑文档,时间都会变动
  • draft 可以放在_draft目录下,当然我更习惯放在_post/中,文件名_开头即可,或者整个目录_开头。
  • 文件名不要经常变动(因为会改变url),title和path可以随时改动

非法操作

  • Deployed Repository人工提交。(除非你不用hexo d命令,或不用hexo)
    -

【hexo源码系列】 入门

首先

为什么要看源码呢?因为想自己更便捷高效的管理博客,比如

  • 如何更新Hexo。(需要看hexo init的源码,因为该命令隐藏了hexo-starter项目)
  • 如何更新theme。某些bug-fix&新功能。(需要借助git的submodule来高效管理)
  • 如何自己实现一个新功能(比如添加edit button,添加URL哈希。需要了解模板原理)

源码不用细看,看个大概能满足自己的需求就够了。

本文仅介绍Hexo基础包扩展包可参考【Hexo插件系列】博客。

查看Hexo和Plugin版本

首先看一下自己的Hexo和Plugin版本,因为不同的版本是不同的实现。版本号是次要的,主要看是不是同一种包。比如hexo-deployer-githexo-deployer-rsync在执行hexo d命令时方式就不同。详见官方文档

查看package.json文件的依赖项。

1
2
3
4
5
6
7
8
9
10
11
"dependencies": {
"hexo": "^3.7.0", # https://github.com/hexojs/hexo/ hexo仅仅是一个module而已,用于...
"hexo-generator-archive": "^0.1.5", # generator最复杂
"hexo-generator-category": "^0.1.3",
"hexo-generator-index": "^0.2.1",
"hexo-generator-tag": "^0.2.0", # nodejs的模板引擎,有EJS、Jade、Swig、Haml。theme-next采用的swig
"hexo-renderer-ejs": "^0.3.1",
"hexo-renderer-stylus": "^0.3.3",
"hexo-renderer-marked": "^0.3.2", # markdown的render engine,即`.md`转`html`
"hexo-server": "^0.3.1"
}

也可用以下命令查看版本:

1
$ npm ls --depth 0

更新各个模块,命令 npm update

  • hexo-cli,
    • 提供hexo init、hexo help、hexo version命令
  • hexo
    • hexo new
    • hexo generate
  • hexo plugin,即node依赖
    • hexo server
    • hexo deploy
    • 其他命令

回顾Hexo搭建流程

以下来自官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. Installation
$ npm install hexo-cli -g

# 2. Setup your blog
$ hexo init blog
$ cd blog

# 3. Start the server
$ hexo server

# 4. Create a new post
$ hexo new "Hello Hexo"

# 5. Generate static files
$ hexo generate

流程详解

1. npm install

npm是nodejs的包管理器,管理javascript lib
hexo-cli是nodejs的一个包,用于运行hexo命令。(有cli难道还有server?)

npm list -g 能够看到安装路径。一般在/usr/lib/node_modules/ 或者/usr/local/lib/node_modules/

2. hexo init

hexo init命令做了什么?

答案

hexo init等价于以下两行shell命令。

1
2
3
4
# 1. Cloning hexo-starter to blog
$ git clone --recursive https://github.com/hexojs/hexo-starter.git blog
# 2. Install dependencies
$ npm install --production

看到这里,就够用。如果自己的hexo项目是老版本的,可以在这个仓库pull更新(虽然更新很少)。
如果对追寻答案的过程感兴趣,可以继续往下看。

追寻答案的旅程 - optional

首先看一下hexo

1
2
3
4
5
6
7
$ which hexo
/usr/bin/hexo

$ cat /usr/bin/hexo
#!/usr/bin/env node
'use strict';
require('../lib/hexo')();

这里你会发现,hexo命令是nodejs脚本。 ../lib/hexo对应的是usr/lib/hexo,然而没有path。

1
2
$ ls -l /usr/bin/hexo
/usr/bin/hexo -> ../lib/node_modules/hexo-cli/bin/hexo

原来/usr/bin/hexo是个符号链接,链接到nodejs的modules目录里。

1
2
3
4
$ cat /usr/lib/node_modules/hexo-cli/bin/hexo
#!/usr/bin/env node
'use strict';
require('../lib/hexo')();

hexo命令对应的是/usr/lib/node_modules/hexo-cli/lib/hexo.js文件。

hexo找到了,init命令呢?讲道理应该是个package.json下的script。

原生hexo-cli提供了4个命令,都在hexo-cli/lib/console路径下。

1
2
3
$ hexo help
$ hexo init
$ hexo version

扩展命令通过hexo-cli/lib/extends.console.js实现。

hexo init 命令

init.js核心代码

路径hexo-cli/lib/console/init.js

1
2
3
4
5
6
7
8
9
var GIT_REPO_URL = 'https://github.com/hexojs/hexo-starter.git';
// 1. git clone --recursive https://github.com/hexojs/hexo-starter.git blog
log.info('Cloning hexo-starter to'
spawn('git', ['clone', '--recursive', GIT_REPO_URL, target]);
removeGitDir(target);
removeGitModules(target);
// 2. npm install --production
log.info('Install dependencies');
spawn(npmCommand, ['install', '--production']);

实际上吧,如果hexo的log打印出来GIT_REPO_URL就更清晰,非要藏起来等人挖掘。

参考

3. hexo server

这个不属于hexo-cli了。
hexo server命令源码

暂没兴趣,应该就是启了个nodejs HttpServer。待看

  • 额外的逻辑是,如果没generate,先调一下 hexo g

但是偶尔出现的bug来源于hexo s,这里的逻辑还需要看一下。

4. hexo new

5. hexo generate

生成器(Generator)官方文档

这个好麻烦,看不动了。这么多generatorrender

放个链接 https://github.com/hexojs/hexo-generator-index ,貌似主要先看这个。

generator

generates static files

这一步最慢。
常用的有hexo-renderer-marked
hexo-renderer-pandoc

render 模板引擎

官方文档

https://hexo.io/zh-cn/api/rendering.html

模板引擎的作用,就是将界面与数据分离。最简单的原理是将模板内容中指定的地方替换成数据,实现业务代码与逻辑代码分离。

生成静态文件。将我们的数据和界面相结合生成静态文件的过程。会遍历主题文件中的 source 文件夹(js、css、img 等静态资源),然后建立索引,然后根据索引生成 pubild 文件夹中,此时的 publid 文件是由 html、 js、css、img 建立的纯静态文件可以通过 index.html 作为入口访问你的博客。

其中 _layout.swig 是通用模板,里面引入了 head、footer 等公共组件,然后在其他的模板中会引入这个 _layout.swig 通用模板,比如 post.swig 模板

  • .md解析成html
  • .swig渲染为html

数据的填充

数据的填充主要是 hexo -g 的时候将数据传递给 swig 模板,然后再由 swig 模板填充到 HTML 中。

6. hexo deploy

deploy到底干了什么?执行了git push?

deploy配置

1
2
3
4
5
6
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repo: git@github.com:xu-song/xu-song.github.io.git
branch: master

部署主要是根据在 _config.yml 中配置的 git 仓库或者 coding 的地址,将 public 文件上传至 github 或者 coding 中。然后再根据上面的 github 提供的 pages 服务呈现出页面。当然你也可以直接将你生成的 public 文件上传至你自己的服务器上。

deploy.js核心源码https://github.com/hexojs/hexo-deployer-git/blob/master/lib/deployer.js#L83

1
2
3
git('add', '-A');  // 对publc目录中执行add操作。
git('commit', '-m', message);
git('push', '-u', repo.url, 'HEAD:' + repo.branch, '--force');

即等价于以下几个命令(通常情况下)

1
2
3
4
5
6
7
$ rm -rf .deploy_git  # log.info('Clearing .deploy_git folder...');
$ cp -rf public .deploy_git # log.info('Copying files from public folder...');
$ cd .deploy_git

$ git add -A
$ git commit -m "Site updated: 2018-01-30 *:*:*" #某时间
$ git push -u origin HEAD:master --force

上面命令使用–force选项,强制push到远程主机,会使远程主机更新的版本被覆盖。所以不要在deploy之后的仓库做提交,要在dev仓库提交。

实例:

参考

如何debug hexo

调试hexo,实质就是调试nodejs

关于theme-next

简介

目录结构

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
├── _config.yml      // 主题配置项文件
├── languages // 语言文件
├── layout // 布局(模板)文件夹
├── scripts //
└── source



// layout 子目录
├── layout
│   ├── _custom
│   │   ├── head.swig
│   │   ├── header.swig
│   │   └── sidebar.swig
│   ├── _layout.swig
│   ├── _macro // 宏,所有页面都包含的部分
│   │   ├── menu // 菜单
│   │   ├── post-collapse.swig
│   │   ├── post-copyright.swig
│   │   ├── post-related.swig
│   │   ├── post.swig
│   │   ├── reward.swig
│   │   ├── sidebar.swig // 比如在sidebar添加
│   │   └── wechat-subscriber.swig
│   ├── _partials
│   │   ├── breadcrumb.swig
│   │   ├── comments.swig
│   │   ├── footer.swig
│   │   ├── head
│   │   ├── header
│   │   ├── page-header.swig
│   │   ├── pagination.swig
│   │   ├── search
│   │   └── share
│   ├── _scripts
│   │   ├── boostrap.swig
│   │   ├── commons.swig
│   │   ├── noscript.swig
│   │   ├── pages
│   │   ├── schemes
│   │   └── vendors.swig
│   ├── _third-party
│   │   ├── analytics
│   │   ├── bookmark.swig
│   │   ├── comments
│   │   ├── copy-code.swig
│   │   ├── exturl.swig
│   │   ├── github-banner.swig
│   │   ├── math
│   │   ├── needsharebutton.swig
│   │   ├── pangu.swig
│   │   ├── rating.swig
│   │   ├── schedule.swig
│   │   ├── scroll-cookie.swig
│   │   ├── search
│   │   └── seo
│   ├── archive.swig
│   ├── category.swig
│   ├── index.swig
│   ├── page.swig
│   ├── post.swig
│   ├── schedule.swig
│   └── tag.swig


// scripts
├── scripts
│   ├── helpers.js
│   ├── merge-configs.js
│   ├── merge.js
│   └── tags


// source子目录
├── source
│   ├── css
│   ├── fonts
│   ├── images
│   ├── js
│   └── lib

如果想改主题,最关心的是layout目录,另外配套改一改对应的source/css

疑问

hexo-theme-next的owner到底是ivan-nginx还是iissnan?

貌似iissnan是老owner,后来移交给了俄罗斯的ivan-nginx。

Main repo was rebased from iissnan’s profile to theme-next organization. 见https://github.com/theme-next/hexo-theme-next/blob/master/docs/UPDATE-FROM-5.1.X.md

【hexo源码系列】 入门

为什么要看源码

能够更便捷高效的管理博客,比如

  • 更新Hexo: 需要了解hexo init的源码,因为该命令隐藏了hexo-starter项目 ()
  • 更新theme: 某些bug-fix以及new feature。可借助git的submodule来高效管理
  • 定制博客(个性化): (比如添加edit button,添加URL哈希,个性化主题。需要了解模板原理

源码不用细看,看个大概能满足自己的需求就够了。

本文仅介绍Hexo基础包扩展包可参考【Hexo插件系列】博客。

查看Hexo和Plugin版本

首先看一下自己的Hexo和Plugin版本,因为不同的版本是不同的实现。版本号是次要的,主要看是不是同一种包。比如hexo-deployer-githexo-deployer-rsync在执行hexo d命令时方式就不同。详见官方文档

查看package.json文件的依赖项。

1
2
3
4
5
6
7
8
9
10
11
"dependencies": {
"hexo": "^3.7.0", # https://github.com/hexojs/hexo/ hexo仅仅是一个module而已,用于...
"hexo-generator-archive": "^0.1.5", # generator最复杂
"hexo-generator-category": "^0.1.3",
"hexo-generator-index": "^0.2.1",
"hexo-generator-tag": "^0.2.0", # nodejs的模板引擎,有EJS、Jade、Swig、Haml。theme-next采用的swig
"hexo-renderer-ejs": "^0.3.1",
"hexo-renderer-stylus": "^0.3.3",
"hexo-renderer-marked": "^0.3.2", # markdown的render engine,即`.md`转`html`
"hexo-server": "^0.3.1"
}

也可用以下命令查看版本:

1
$ npm ls --depth 0

更新各个模块,命令 npm update

回顾Hexo搭建流程

以下来自官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. Installation
$ npm install hexo-cli -g

# 2. Setup your blog
$ hexo init blog
$ cd blog

# 3. Start the server
$ hexo server

# 4. Create a new post
$ hexo new "Hello Hexo"

# 5. Generate static files
$ hexo generate

流程详解

1. npm install

npm是nodejs的包管理器,管理javascript lib
hexo-cli是nodejs的一个包,用于运行hexo命令。(有cli难道还有server?)

npm list -g 能够看到安装路径。一般在/usr/lib/node_modules/ 或者/usr/local/lib/node_modules/

2. hexo init

hexo init命令做了什么?

答案

hexo init等价于以下两行shell命令。

1
2
3
4
# 1. Cloning hexo-starter to blog
$ git clone --recursive https://github.com/hexojs/hexo-starter.git blog
# 2. Install dependencies
$ npm install --production

看到这里,就够用。如果自己的hexo项目是老版本的,可以在这个仓库pull更新(虽然更新很少)。
如果对追寻答案的过程感兴趣,可以继续往下看。

追寻答案的旅程 - optional

首先看一下hexo

1
2
3
4
5
6
7
$ which hexo
/usr/bin/hexo

$ cat /usr/bin/hexo
#!/usr/bin/env node
'use strict';
require('../lib/hexo')();

这里你会发现,hexo命令是nodejs脚本。 ../lib/hexo对应的是usr/lib/hexo,然而没有path。

1
2
$ ls -l /usr/bin/hexo
/usr/bin/hexo -> ../lib/node_modules/hexo-cli/bin/hexo

原来/usr/bin/hexo是个符号链接,链接到nodejs的modules目录里。

1
2
3
4
$ cat /usr/lib/node_modules/hexo-cli/bin/hexo
#!/usr/bin/env node
'use strict';
require('../lib/hexo')();

hexo命令对应的是/usr/lib/node_modules/hexo-cli/lib/hexo.js文件。

hexo找到了,init命令呢?讲道理应该是个package.json下的script。

原生hexo-cli提供了4个命令,都在hexo-cli/lib/console路径下。

1
2
3
$ hexo help
$ hexo init
$ hexo version

扩展命令通过hexo-cli/lib/extends.console.js实现。

hexo init 命令

init.js核心代码

路径hexo-cli/lib/console/init.js

1
2
3
4
5
6
7
8
9
var GIT_REPO_URL = 'https://github.com/hexojs/hexo-starter.git';
// 1. git clone --recursive https://github.com/hexojs/hexo-starter.git blog
log.info('Cloning hexo-starter to'
spawn('git', ['clone', '--recursive', GIT_REPO_URL, target]);
removeGitDir(target);
removeGitModules(target);
// 2. npm install --production
log.info('Install dependencies');
spawn(npmCommand, ['install', '--production']);

实际上吧,如果hexo的log打印出来GIT_REPO_URL就更清晰,非要藏起来等人挖掘。

参考

3. hexo server

这个不属于hexo-cli了。
hexo server命令源码

暂没兴趣,应该就是启了个nodejs HttpServer。待看

  • 额外的逻辑是,如果没generate,先调一下 hexo g

但是偶尔出现的bug来源于hexo s,这里的逻辑还需要看一下。

4. hexo new

5. hexo generate

生成器(Generator)官方文档

这个好麻烦,看不动了。这么多generatorrender

放个链接 https://github.com/hexojs/hexo-generator-index ,貌似主要先看这个。

generator

generates static files

这一步最慢。
常用的有hexo-renderer-marked
hexo-renderer-pandoc

render 模板引擎

官方文档

https://hexo.io/zh-cn/api/rendering.html

模板引擎的作用,就是将界面与数据分离。最简单的原理是将模板内容中指定的地方替换成数据,实现业务代码与逻辑代码分离。

生成静态文件。将我们的数据和界面相结合生成静态文件的过程。会遍历主题文件中的 source 文件夹(js、css、img 等静态资源),然后建立索引,然后根据索引生成 pubild 文件夹中,此时的 publid 文件是由 html、 js、css、img 建立的纯静态文件可以通过 index.html 作为入口访问你的博客。

其中 _layout.swig 是通用模板,里面引入了 head、footer 等公共组件,然后在其他的模板中会引入这个 _layout.swig 通用模板,比如 post.swig 模板

  • .md解析成html
  • .swig渲染为html

数据的填充

数据的填充主要是 hexo -g 的时候将数据传递给 swig 模板,然后再由 swig 模板填充到 HTML 中。

6. hexo deploy

deploy到底干了什么?执行了git push?

deploy配置

1
2
3
4
5
6
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repo: git@github.com:xu-song/xu-song.github.io.git
branch: master

部署主要是根据在 _config.yml 中配置的 git 仓库或者 coding 的地址,将 public 文件上传至 github 或者 coding 中。然后再根据上面的 github 提供的 pages 服务呈现出页面。当然你也可以直接将你生成的 public 文件上传至你自己的服务器上。

deploy.js核心源码https://github.com/hexojs/hexo-deployer-git/blob/master/lib/deployer.js#L83

1
2
3
git('add', '-A');  // 对publc目录中执行add操作。
git('commit', '-m', message);
git('push', '-u', repo.url, 'HEAD:' + repo.branch, '--force');

即等价于以下几个命令(通常情况下)

1
2
3
4
5
6
7
$ rm -rf .deploy_git  # log.info('Clearing .deploy_git folder...');
$ cp -rf public .deploy_git # log.info('Copying files from public folder...');
$ cd .deploy_git

$ git add -A
$ git commit -m "Site updated: 2018-01-30 *:*:*" #某时间
$ git push -u origin HEAD:master --force

上面命令使用–force选项,强制push到远程主机,会使远程主机更新的版本被覆盖。所以不要在deploy之后的仓库做提交,要在dev仓库提交。

实例:

参考

渣渣中的渣渣 之 DaoVoice

垃圾中的垃圾 之 DaoVoice

特点:高延迟

你如果用过DaoVoice的话,肯定知道它延迟很长。但是为什么延迟这么长呢,下面来看看。

通常web-chat都采用websocket。
html–server–html
就是一堆的websocket连接

反应特别慢,消息的发送和接收,在websocket中并未看到。

消息的发送
https://im.daovoice.io/v1/conversations/b1fba959-a843-43ca-9538-928a1cdfd62d/reply
的request payload参数进行明文传输的。

消息的接收
https://im.daovoice.io/v1/conversations/b1fba959-a843-43ca-9538-928a1cdfd62d/read

消息接收并非是服务器推送的,而是每次客户端主动发送消息时才会触发消息接收。(DaoVoice的设计也太挫了吧,这可不是一般的延迟啊,根本不能叫instant message)

开了个websocket,什么事都不干,发一些没用的数据。

dao voice原理

基于websocket

Request

1
2
3
Request URL:wss://rtm.daovoice.io/socket.io/?EIO=3&transport=websocket&sid=-ezTav4AxWfvgBszAjuI
Request Method:GET
Status Code:101 Switching Protocols

Response header

1
2
3
4
5
6
Connection: upgrade
Date: Tue, 06 Feb 2018 01:52:13 GMT
Sec-WebSocket-Accept: +vrxS3Tw4HDKi3JDS5wRL7vIqKc=
Sec-WebSocket-Extensions: permessage-deflate
Server: nginx/1.9.13
Upgrade: websocket

Frames

首先发送http请求
https://rtm.daovoice.io/socket.io/?EIO=3&transport=polling&t=M5ZWKps&sid=JtjO6wXdOoHH7RXWFqhw

https://im.daovoice.io/v1/conversations/02010594-d7b8-4f3a-896a-4f82e2cc9198/fetch
https://im.daovoice.io/v1/conversations/02010594-d7b8-4f3a-896a-4f82e2cc9198/read
https://im.daovoice.io/v1/conversations/02010594-d7b8-4f3a-896a-4f82e2cc9198/reply

如何自己实现在线联系

利用websocket

利用微信api

参考

利用dao voice

关于域名

顶级域名比较

互联网顶级域列表

简介 google页面数(million) 域名数目 域名饱和度 开放时间 价格 审核 星级 备注
.com 原用于商业组织,现无限制 25,270 13290万 4字母的基本饱和 1985-01-01 ☆☆☆☆☆
.net 原用于网络服务,现无限制 2,790 1437万 大批量4字母 1985-01-01 ☆☆☆☆
.org 原用于非营利组织,现无限制 5,040 1040万 大批量4字母 1985-01-01 ☆☆☆☆ 国内不能实名认证,不能备案
.info 适用于提供信息服务的企业 738 656万 2001-06-26
.cn 中国 425 1134万 1990-11-28 需提供政府颁发的有效身份证件。 ☆☆☆☆
.us 美国 420 205万 1985-02-15 美国的网站很喜欢使用.com的域名。因此.us网站相对较少
.io 新秀,“Indian Ocean”为英属印度洋领地的缩写 193 33万 1997-09-16 ☆☆☆☆ 该顶级域十分受初创公司和IT公司欢迎
.biz 104 200万 2001-06-26 取意来自英文单词 “business” ,代表着商业领域,在 .com 资源日渐枯竭的情况下, .biz 必将代替 .com 成为企业注册域名的首选。
.cc 91 96万 1997-10-13
.ai 英国海外属地安圭拉国家及地区顶级域 25 3万 1995-02-16 ☆☆☆☆ 由于近来人工智能的大热,.ai域名热度极度攀升
.xyz 24 184万 2014-02-06
.top 1 168万 2014-07-24 便宜
.vip 0.6 74万 2015-07-30 便宜
特殊用途域名
.gov 政府部门 1,170 0.5万 1985-01-01 需提供相关证件资料 ☆☆☆☆☆☆ 域名少,页面丰富
.edu 教育机构 601 0.7万 1985-01-01 需提供相关证件资料 ☆☆☆☆☆☆

中文域名

比如 域名.com,有点贵

溢价域名

溢价域名,是注册局根据ICANN相关规定,在开放注册后可以保留一定时间后再开放的。
通常情况下,溢价域名是注册局保留的精品优质域名。

域名实名认证

.org .cc .me的域名不能实名认证,不在阿里云实名认证列表里。会有一下提示:

根据工信部和域名注册局新的实名认证要求,该后缀域名暂时停止实名认证,具体开放时间等待进一步通知

阿里云实名认证文档:

为贯彻国家工信部对域名持有者实名制审核管理的相关规范,阿里云将全面推行域名实名认证。域名实名认证包括域名命名审核(指域名将由国家监管部门认定是否含有政策不允许注册的字符)和域名持有人信息资料实名认证。

须完成实名认证或命名审核的域名

按照工信部 2017 年全面域名实名认证的要求,目前阿里云已接到相关注册局通知:若域名在规定时间内未通过实名审核,会被注册局暂停解析(Serverhold),无法正常访问,待实名认证通过后方可恢复正常使用。涉及的域名后缀包括:.cn/.中国/.公司/.网络/.xin/.com/.net/.top/.xyz/.vip/.club/.shop/.wang/.ren/.site/.我爱你/.集团/.biz/.red/.kim/.pro/.info/.mobi/.ltd/.group/.link/.ink/.在线/.中文网/.网址/.work/.online/ .tech/.fun/.store/.网店/.live/.social/.pub/.video。

没有实名认证的域名可以备案吗? 不能,因为备案需要域名证书

没有办法 转国外了

我想问 你们域名都在国外,NS有没在国内?比如cloudxns?
有啊,我就是namesilo域名,cloudxns解析,没啥问题

备案

  • 2018年1月1日起,工信部要求备案域名必须完成域名实名认证,未完成实名认证、实名信息与备案信息不一致等会被管局驳回。
  • 备案订单有效期为45天(自提交当天开始计算),订单超期后自动失效,请您尽快提交并完成备案。为避免影响网站备案及访问,请注意服务器的服务期限及时续费。
  • 网站备案域名核验

提示域名不支持备案怎么办?

市面上流通的域名后缀并非都可以备案。只有工信部收录的域名后缀才允许开放备案,目前工信部暂未收录 .pub/.rocks/.band/.market/software/.social/.lawyer/.engineer/.link/.click/.help/.gift/.pics/.photo/.news/.video/.win/.party/.date/.trade/.science/.online/.tech/.website/.space/.press/.wiki/.design/.live/.studio/.red/.loan/.bid/.mom/.lol/.work/.game/.store/.ltd 等后缀的域名,故无法进行网站备案。

您可以访问 工信部备案管理系统 (www.miitbeian.gov.cn),进入 公共查询 > 域名类型 查看域名后缀是否已收录。如果您购买的域名后缀无法进行备案,您可将域名指向中国大陆以外免备案服务器。中国大陆以外节点服务器无需进行备案。

此外,部分省市管局对可备案域名有特殊要求,请查看各省管局 备案规则。

认可度,信任程度,稳定性,正式度,流行度排名。

国内域名

  1. .cn 要使用您的域名,您必须提供政府颁发的有效身份证件。
  2. .com.cn 要使用您的域名,您必须提供政府颁发的有效身份证件。
  3. .org.cn

其他

  1. .song 神奇的亚马逊还有这个域名
  2. 特殊功能域名 .shoes .map .data .game .x 等
  3. last.fm del.icio.us flic.kr .blog

适宜个人:.me .name .blog .site(换个说法就是不适宜商用,)

锤子花高价买t.tt
所以不流行的域名里,配合好的二级域名也是有投资价值的

预测

  • 无商业投资价值的域名不会火,
    规律,商人、组织、企业们看中哪个域名,哪个域名就火。像个人主义的域名,再名字再好,在商业投资价值下,也变得逊色。比如.me

收费 & 续费

[万网-阿里云价格]https://wanwang.aliyun.com/help/price.html

续费小技巧:先将域名转到国内,续费个好几年,等 2 个月后转出到国外。
比如 shuaige.me 已续费到 2023 年, 13 年 37 一年续到了 22 年,今天转到了 gandi 花了 99

排名

注册量总排名

全球十大域名后缀,.cn仅次于.com

实时查询


|

国别域名 注册量排名

.cn域名总量达2140万,国别域名中位居全球第一

截至2017年3月31日,国别域名的注册总量为1.431亿个,环比增长03.%,同比增长1.7%。其中排名前十的分别是.cn(中国)、.tk(托克劳)、.de(德国)、.uk(英国)、.ru(俄罗斯)、.nl(荷兰)、.br(巴西)、.eu(欧盟)、.au(澳大利亚)和.it(意大利)。

目前(2018-02-27),.tk 第一,.de第二,.cn第三

神奇的 .tk

.tk 托克劳是一个太平洋上的蕞尔小岛国,却无疑是互联网世界中的真正霸主。它力压所有国家成为了域名最多的国家。

托克劳使用了一种目前在互联网上极为流行的“免费增值”商业模式,以.tk注册的网站只享有免费的使用权。若想完全拥有这个域名仍需要支付一笔费用。这些费用占了托克劳年收入的六分之一。

域名免费提供给任何人。

新域名排名

新顶级域名总量达2540万,.xyz、.top、.loan位居前三

1500537226527745

.xyz注册量这么大,不可思议。也许因为便宜,8元一个。另外还免费送,在中国备案也助长注册量吧。目前已经在走下坡路了

default

知乎
一切不能在中国备案的域名后缀球都不值 (什么意思?)

域名对SEO的影响

域名对网页搜索没有影响。

reference

域名注册机构变化

注册商

whois

是用来查询互联网中域名的IP以及所有者等信息的传输协议。早期的WHOIS查询多以命令行接口(Command Line)存在,但是现在出现了一些基于网页接口的简化在线查询工具,甚至可以一次向不同的数据库查询。网页接口的查询工具仍然依赖WHOIS协议向服务器发送查询请求,命令行接口的工具仍然被系统管理员广泛使用。
WHOIS通常使用TCP协议43端口。每个域名或IP的WHOIS信息由对应的管理机构保存,例如,以.com结尾的域名的WHOIS信息由.com域名运营商VeriSign管理,中国国家顶级域名.cn域名由CNNIC管理。

通常情况下,域名或IP的信息可以由公众自由查询获得,具体的查询方法是登陆由管理机构提供的WHOIS服务器,输入待查询的域名进行查询。

whois.ai的变化

ai-domain也在这次升级中变为注册商,代号ai-domain。可惜的是,新用户已经无法在whois.ai创建账户,这意味着,新用户只能通过注册商进行注册了。而且注册局的用户的域名只出不进,即只提供转出功能,不提供转入功能。whois.ai已经变成一个遗留系统,趋势上会慢慢退出历史的舞台。前后模式的变化如下图:

ss

参考:https://www.zhihu.com/question/57642499/answer/154856435

域名转让/交易

  • 带价push,是直接Push到对方账户里,他要付款接收。(自己找买家,随意商议价格)
  • 一口价域名发布,一口价需要他找域名批量或逐个购买(阿里平台给你找买家,当然要手续费) 烂域名就一口价甩出去
  • 线上议价域名发布 ()
  • 竞价域名发布

  • 一口价挂出来,有被其他人秒走的可能(好域名可以线上议价)

交易手续费 手续费为 1%
平台支持的一口价、线上议价会收取手续费,带价 push 免费。

交易费由谁承担?
由卖家承担,对于域名买家不受影响。

根据ICANN域名转移政策调整要求,为了确保交易的顺利进行,请所有卖家选择关闭“60天内禁止转出阿里云”限制,否则不能发布域名交易,且在2017年1月10日24点前未完成确认的已发布交易域名将全部下架处理,点击确认

域名发展史

关于SEO

简介

如何检查自己网站是否被baidu google检索

site:xu-song.top git
site:xu-song.github.io git

提交百度检索

https://ziyuan.baidu.com/linksubmit/url

百度搜索资源平台为站长提供链接提交通道,您可以提交想被百度收录的链接,百度搜索引擎会按照标准处理,但不保证一定能够收录您提交的链接。

Hexo 博客添加百度sitemap

hexo部署在github,用百度的站长收录sitemap,抓取失败怎么办?
Github屏蔽了百度爬虫。
除了sitemap还有其他提交方法,还可以采用主动推送和自动推送,

为什么我的博客始终无法被百度收录

我在GoDaddy购买了域名,完成了在谷歌搜录,百度完成自动推送的设置后在sitemap一栏中填入我的域名始终显示sitemap抓取失败,请问这是什么问题我该如何解决呢 – 知乎

github 禁止了百度的爬虫,你可以在 国内的 coding.net 上放一份,然后修改域名服务商的 CNAME 让国内的指向 coding.net ,国外的依然指向 github。具体你自己查下吧

就算放开了,肯定也没有国内的vps收录快。还有就是并不是所有的ip地址的权重都一样。爬虫有自己喜欢和不喜欢的ip群

如果完全没有外链,也不向百度提交,相当于孤岛,是不可能被收录的。
除非有人替你提交,或者本身百度数据库有你域名的记录。

没外链不代表孤岛,没外链你DNS修改时候百度等也有可能会知道,参考dnspod和百度合作的某文章……

有多个域名,怎么做最符合 SEO?

把其他域名都转发到主域名。很多人把不同的域名都解析到同一个网站,这样导致的结果是其他的域名没有对主域名起到任何作用,反而可能导致负面影响,如:让搜索引擎分不清到底哪一个是主域名。

搜索引擎对同一ip下的域名有互相推广的作用,给的比重越来越小了,多个域名同时解析到一个主机上,对SEO是有影响的,比如说:排名不好、PR值低、收录量少等问题。

对于多域名绑定建议从下面入手:

1.使用301重定向功能。关于301重定向的操作需要注意的是:不要将次要网站中的所有网页的流量都重定向到主站上,这样做虽然节省了很多工作量,但是如果用户从搜索引擎上找过来,访问到的网页并不是他想要的内容,就会损失流量。尽可能做到页对页的重定向,保证用户从搜索引擎找过来的网页即使不是绝对匹配也是相关的内容。

2.给次要的网站首页做一个导航,把流量指引到主站上;

3.给次要的域名做URL转发;

一定要这样做:实现301重定向把次域名重定向到主域名去,避免权重分散,甚至被K,或者影响SEO排名。

  • 301 redirect::301代表永久性转移。301重定向是网页更改地址后对搜索引擎最友好的方法,只要不是暂时搬移的情况,都建议使用301来做转址。
  • 302 redirect::302代表暂时性转移。在前些年,不少Black Hat SEO曾广泛应用这项技术作弊。各大主要搜索引擎均加强了打击力度。(怎么作弊?)

当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,第一,没有网址规范化问题,第二,也很重要的,网页A的PR网页级别会传到网页B。

SEO与跳转(重定向)

301 vs 302 vs meta-refresh tag

参考

URL 重定向服务实际并非DNS 服务,它们在 HTTP 级别运行,而非 DNS 级别。使用URL转发的客户基本都是免费DNS的用户,当前业务暂不会投入支持。

301重定向

301 重定向,是指当用户通过浏览器访问某个 URL 时,Web 服务器被设置自动跳转到另外一个 URL,此时给客户端的返回码是 301。

应用场景

301 重定向一般用于两个 URL 之间的跳转。由于 301 重定向可以实现 URL 跳转后的权重转移,实现 SEO 优化,所以常用于如下场景:

  • 网站有多个域名,但有一个主域名作为 SEO 推广对象,所有其他域名可以做 301 重定向到主域名,实现权重转移。
  • 网站更换过域名,希望用新的域名作为 SEO 推广对象,当网站的用户访问旧域名时就会被 301 重定向到新的域名,实现权重转移。
    • 迁移后,访问统计归零。
    • 301重定向之后是不会承继老网站的关键词排名,只不过老网站的排名依然在而已,用户点击你的老域名会直接指向新域名
  • 网站部分内容做过调整,URL 已经无法访问,可以做 301 重定向实现权重转移。

参考:

http://www.360doc.com/content/14/0212/15/13780192_351920352.shtml

http://www.hurencai.com/archives/453

服务器ip迁移

比如从gitpage迁移到coding page。

https://www.zhihu.com/question/19987112

###

URL设计 与 SEO

  • 静态URL
  • 尽量英文,中文用拼音。(现在搜索引擎也对中文优化了,貌似中文url也不错,例如wikipedia的中文页面就采用的中文url)
  • 字母全部小写
  • URL中包含关键词
  • url要短
  • 单词之间一般建议使用短横线(-)分隔,不要使用下划线或者其他符号

robots.txt

robots.txt位置固定,sitemap.xml需要在robots.txt中指定路径

必要性

提交链接的几种方式

Sitemap提交:在配置sitemap文件时,无论是txt格式的文本文档还是还是xml格式的文件。都不建议将其sitemap的文件名命名为sitemap.txt或sitemap.xml这么大众化且谁都能够知道的文件名。如果你这样设置,你的竞争对手或需要你网站内容的人很容易就能拿到你所有的页面url。出于保险起见还是使用一些自己定义的较复杂的文件名。每一个url都必须包含http://,文件中包含的url不得超过5万条,单文件大小不得超过10MB,一个站点最多提交5万个sitemap文件,超出5万个不再处理并会提示“链接数超”。如果是通过子域名的形式验证的站点。那么主域名下的sitemap文件是可以包含该域名下的所有域名的url的。

主动推送:

对比sitemap而言在及时抓取上推送更快、发现更快、抓取更及时。如果是时效性文章不排除其收录速度达到一瞬间的效率,这里特别建议一下,最好是主动推送我们网站第一时间产生的新内容给百度其效果更佳;主动推送是有推送数量的限制,尽可能的不要推送重复的内容给百度。这样会大大浪费自己的可推送资源。

自动推送:在页面被访问时,页面URL将立即被推送给百度

sitemap

爬虫会通过网页内部的链接发现新的网页。但是如果没有连接指向的网页怎么办?或者用户输入条件生成的动态网页怎么办?能否让网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页?这就是sitemap,最简单的 Sitepmap 形式就是XML文件,在其中列出网站中的网址以及关于每个网址的其他数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度等等),利用这些信息搜索引擎可以更加智能地抓取网站内容。

新的问题来了,爬虫怎么知道这个网站有没有提供sitemap文件,或者说网站管理员生成了sitemap,(可能是多个文件),爬虫怎么知道放在哪里呢?

由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。这就成为robots.txt里的新成员了。

站点地图对于百度失效。可以用主动推送和自动推送,

对于主域名下有多个2级域名的问题,应该是每一个二级域名都有自己独立的robots文件和sitemap。

必要性:不做也能收录。
最好做,为蜘蛛提供一个引导,有利于收录

知乎没有sitemap.xml,或许自定义了文件名

https://blog.eson.org/2018/03/04/web/site-dev/seo-in-hexo/

主动推送

调用接口
http://data.zz.baidu.com/urls?site=https://blog.eson.org&token=hOraXsrU6jl6Pifg"

应用实例

hexo的baidu主动推送hexo-baidu-url-submit

新链接的产生,hexo generate会产生一个文本文件,里面包含最新的链接
新链接的提交,hexo deploy会从上述文件中读取链接,提交至百度搜索引擎。

自动推送

页面每次被访问时,页面URL将立即被推送给百度。借助用户的浏览行为来触发推送动作,无需站长汇总URL再进行主动推送操作,省去了站长人工操作的时间。

源码

需要将这段js代码部署到我们的每一个网页中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

每当用户进行访问时,就会触发了这段代码,这段代码自动将当前页面的url推送给了百度。具体推送代码如下:

push.js

1
2
3
4
5
6
7
8
9
10
11
12
!function() {
var e = /([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi
, r = window.location.href
, t = document.referrer;
if (!e.test(r)) {
var o = "https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif";
t ? (o += "?r=" + encodeURIComponent(document.referrer),
r && (o += "&l=" + r)) : r && (o += "?l=" + r);
var i = new Image;
i.src = o
}
}(window);

比如每次访问页面https://blog.eson.org时,都会触发一个http请求https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif?l=https://blog.eson.org/。这就是自动推送。

应用实例:

hexo-theme-next中的baidu自动推送, baidu-push.swig

总结

建议同时配置这三种方式,并让三者协同工作,将抓取和收录价值最大化。

怎样判断网站有网址规范化问题?

1) 查一下这些URL是否都有差不多的PR值和网页快照:

http://domainname.com
http://www.domainname.com/index.html
http://domainname.com/index.html
http://www.domainname.com

2)搜一下site:domain.com看是否结果中有多个主页版本。

3)你的网站是否在Google有大量网页被标为“ 补充材料”(Supplemental Result)。一般认为被归为“ 补充材料”是网址规范化问题的征兆。

reference: https://www.seozac.com/seo/301-redirect/

site:.top

tips

  1. edu和gov后缀的域名天生权重更高。有些域名天生反链高,比如xxx sex 之类的等等!

    • 百度说:使用何种形式的域名后缀对百度网页搜索没有影响
  2. 注册时间越早的域名,越有利于排名。

  3. 到期时间越晚的域名,越有利于排名。

  4. 不同的子域名是会被当作独立网站处理的,不能继承主域名的权重。

  5. 不同国家的域名,在本国会越有利于排名,比如http://abc.cn在中国会排名更好,而http://abc.us在美国会排名更好。

一个网站有多个域名没问题,请做好301跳转,别每个域名都可以访问。

gov和edu对排名有利,但对大多数人没什么指导意义,因为你根本弄不到这种后缀的域名。

域名买卖历史,(不涉及到违规行业越好)

惩罚 & 奖励

  • 关键词堆砌
  • 频繁的修改网页title、description和keywords
  • 网站加上黑链
  • 短时间内频繁的增加外链,或者短时间内大量的删除外链
  • 服务器不稳定,网站经常打不开活域名解析错误。
  • 全站 HTTPS,谷歌对 HTTPS 有加分
  • 响应式设计,谷歌对提供友好移动端友好页面有加分
  • AMP,谷歌对提供 AMP 支持的网站有加分
  • PWA,谷歌对 PWA 有加分
  • 加载优化,谷歌对 Pageseed 测试 90 分以上的网站有加分
  • 页面内容持续不断更新,迎合了搜索引擎喜新厌旧的特性。
  • 关键词密度要提升,但不是堆积
  • 高质量内容出现在代码更靠前的位置,方便搜索引擎识别抓取。

  • 内容很少的页面搜索引擎肯定不喜欢

tricks

有很多大学生在他们大学的个人网站上出卖链接。搜索引擎怎样去辨别哪些来自.edu的链接是自然的?哪些又是买卖的呢?

seo诊断

bing站长有SEO Analyzer。

title长度

诊断我的主页,title太短,因为只有四个字母ESON。

Recommended Action:
Change the length of the title to be between 5 and 100 characters

SEO Explanation:
If the title is too short, it may not provide us and users with enough information to understand the relevancy of your page. If the title is too long, we may need to shorten it in the search results and your keywords may not appear on the search results page. You should try to keep the length of the title somewhere between at least 5 characters and 100 characters.

description长度

Recommended Action:
Change the description in the tag in the page source to be between 25 and 160 characters in length.

SEO Explanation:
Search engine crawlers only show the first 150-160 characters of the description in the search results page, so if a description is too long, searchers may not see all of the text. If a description is too short, the search engines may add text found elsewhere on the page. Note that search engines may show a different description from the one you have authored if they feel it may be more relevant to a user’s search.

tag数量太多

https://blog.eson.org/2018/01/25/web/site-dev/seo/seo-for-spider/

There are multiple

tags on the page.
Recommended Action:
Remove redundant

tags from the page source, so that only one

tag exists.

tag 的 ALT属性

Recommended Action:
Use the attribute to write descriptive content for the image: <img source=”pic.gif” alt=”Accurate and descriptive keyword text that represents the image.”.

SEO Explanation:
As a general rule, search engines do not interpret the content of image files. The text provided in the attribute enables the site owner to provide relevant information to the search engine and to the end user. Alt text is helpful to end users if they have images disabled or if the image does not properly load. In addition, the Alt text is utilized by screen readers. Make sure that your Alt text is descriptive and accurately reflects what the image represents and supports the content on the page.

reference

https://www.webmasterworld.com/forum25/3716.htm
http://www.ehcoo.com/seo.html
百度站长平台关于SEO的建议
自动推送Hexo博客文章至百度 待看
知乎是怎么把 SEO 做起来的?

常见疑问

http站点转为https后,对站点原本的评价权重得分是否有影响?

无影响,后续会有正向收益,认为https更安全,在排序上会有倾斜。

转https后,需要做301跳转,在这个过程中,http已有的排名是否会有变动?快照是否有变动?301需要永久存在吗?

快照和排名不会有变化,建议301永久存在,不管是对搜索引挚还是对用户来说都更好一些。

针对https的站点,百度在抓取技术层面上有哪些建议?

如果以前有http站点,建议永久保留跳转行为。之后注意通过百度站长平台的抓取诊断工具和抓取异常工具关注抓取结果。

百度索引量增加收录量反而下降是什么原因?

百度索引量是指被百度收集的数量,百度收录量是指被百度放出的数量

  1. 索引量指可以被搜索用户搜索到的网站数据库,索引量工具同时支持站点自定义想要关注的目录,查看某一目录规则下的索引量;索引量不等于流量,索引量会有定期数据波动,属于正常现象。
  2. 百度索引数据最快每天更新一次,最迟一周更新一次,不同站点的更新日期可能不同。
  3. 您可以查询到近一年中每天的索引量数据,一年前的索引量数据为每月索引量数据。
  4. 如果已有流量数据查询不到,请隔日再查,最长间隔一周可查询到数据。
    来自百度 https://ziyuan.baidu.com
  1. 百度索引是指你的网页已被百度蜘蛛爬取到百度索引库里了,但这不表示你的网页被百度收录了,所以你是检索不到的。
  2. 百度收录是指,在百度索引库的网页经一定检查符合百度标准的,百度“转移到”(这个词是我自己说的,方便理解,实际百度未必这样处理)收录库里,予以放出,也就是被百度收录了这时你才能检索到自己的网页,但此时你的网页如果不符合标准仍然有从百度收录库被删的可能,比如文章是复制的重复率太高等等,百度检查也不是完美的。

索引增加说明,百度蜘蛛还会定期到你的网站爬取网页,所以你的索引会增加。
收录减少很可能是因为你的网页在百度的价值不够,又被百度收录删了。

为什么百度索引量和收录量一直不增加呢?

新站开始收录比较慢比较正常,当然有些新站收录也会比较好。
这个也是有一些偶性的,看下抓取频次和日志里面的蜘蛛爬行情况,都是正常即可。

提交链接后,都会被百度抓取并收录吗?

百度对已提交的数据,不保证一定会抓取及收录所有网址。是否收录与页面质量相关。

实例

电商比较重视排名,SEO一定要好

总结

麻蛋,百度不行啊。seo设置麻烦,收录又慢。google都不用设置,收录又新又好。

【Hexo插件系列】 常用tag

buttion标签

1
{% btn #, Text %}
Text Text Text & Title Text & Icon (fixed width)

note标签

1
2
3
4
5
6
{% note success %}
success **欢迎**[note](.)
{% endnote %}
{% note danger %}
danger **欢迎**[note](.)
{% endnote %}

success 欢迎note

danger 欢迎note

评价
note标签在theme-next中集成。它是
blockquote的强化版。额外增加了:
主题: simple, modern, flat
色系+图标: default(灰色), primary(紫色), info(蓝色), success(绿色), warning(黄色), danger(红色)

注意: 不要写在一行,避免渲染错误

建议
采用更优雅的方式,比如>danger的方式,继承markdown的blockquote

label标签

1
Lorem {% label default@ipsum %} {% label primary@dolor sit %}.

Lorem ipsum dolor sit.

色系: 与note相同

只是添加了颜色而已吧,搞这么复杂。

tab标签

1
2


This is Tab 1.
b = 1
c = 2
b + c

b + c = 3

This is Tab 3.

extrul标签

1
{% exturl Hexo Theme Next https://github.com/iissnan/hexo-theme-next/ %}
Hexo Theme Next

评价: 不如直接写html,比如下面的例子

1
2
<i class="fa fa-external-link"></i>
[<i class="fa fa-external-link">link to </i>](ss)

类似的bootstrap标签

chat标签

hexo-tag-chat,under construction.

雷军
文字狱是清朝哪位皇帝兴起的;
雷军
康熙
雷军
拼音中四声起于;
雷军

TODO:

  • 用icon还是用头像?icon可以用foneawesome,头像限制比较多
  • 丰富头像库






instagram标签

hexo-tag-instagram 将 Instagram元素嵌入Hexo博客

1
2
3
4
5
6
7
8
# 1. 默认配置 width:100%, captioned:true
{% instagram url:https://www.instagram.com/p/Bg71nq4HuAU/ %}
# 或
{% instagram Bg71nq4HuAU %}
# 2. 无标题 + 调整尺寸
{% instagram false Bg71nq4HuAU 60% %}
# 或
{% instagram captioned:false id:Bg71nq4HuAU width:60% %}