Posts Jekyll 的 SEO 优化
Post
Cancel

Jekyll 的 SEO 优化

近来对博客主题、架构改进的热情明显高于写文章,略有本末倒置的意味。愧疚感驱使笔者写下最近为站点做的一些 SEO 优化:

  • 爬虫保护
  • 目录访问保护
  • permalink

爬虫保护

万维网上的站点,都会被搜索引擎爬虫抓取内容,以之作为搜索结果列表。搜索引擎会依据站点根目录的robots.txt所定义的规则,去抓取当前站点的内容。

对于运行在 GitHub Pages 的站点,默认会生成一个文件 robots.txt,内容为:

1
Sitemap: https://DOMAIN/sitemap.xml

其中 DOMAIN 表示站点域名,指令定义 Sitemap 文件位置。为了指示爬虫 Bot 不去抓取某些图片、文件等静态资源,可以在 robots.txt 中新增自定义的指令。

首先在站点根目录新建文件robots.txt 去覆盖自动生成的默认版本。接着添加爬虫指令:

指定 robots 范围,通配符*表示对所有 robot 适用:

1
User-agent: *

指定禁止抓取的路径,请注意目录必须以/结尾:

1
2
Disallow: /target_dir/            # 禁止目录
Disallow: /targer_file.extension  # 禁止文件

看了相关资料介绍,因为 robots.txt 文件是可以被直接访问的,所以在文件中直接列出具体目录,会暴露网站的目录结构,所以根据建议,在根目录建一个专门对 Bots 隐藏的目录 /norobots/,将所有需要隐藏的零碎文件、目录等挪到里面即可。

笔者的指令为:

1
2
Disallow: /assets/    # /assets/ 是常规资源目录,不怕暴露路径
Disallow: /norobots/  # 零碎敏感文件、目录等放置在此

:此时浏览器直接访问站点 ${HOST_DOMAIN}/norobots/还是可以看到文件列表的,达不到隐藏站点目录结构的目的,下文再作保护介绍。

最后要增加对 sitemap 的指令:

1
Sitemap: https://blog.cotes.info/sitemap.xml

如果更换了域名,就要手动的更改Sitemap地址。此时可以使用 Jekyll 的全局配置变量取代硬编码:

robots.txt文件顶部添加 Jekyll 的 Assets 声明(YAML):

1
2
3
---
layout: null
---

然后Sitemap指令修改为:

1
Sitemap: {{ site.url }}/sitemap.xml

这样域名就会随着_config.yml自动更改了。

完整的robots.txt内容如下:

1
2
3
4
5
6
7
8
9
10
11
---
layout: null
permalink: robots.txt
---

User-agent: *

Disallow: /assts/
Disallow: /norobots/

Sitemap: {{ site.url }}/sitemap.xml

Jekyll 目录保护

出于安全考虑,站点的某些目录结构,譬如上文提到的/norobots/,不希望被外部访问,所以需要使用重定向来保护目录。 部署在 GitHub 上的 Jekyll 站点,Apache Web Server.htaccess重定向规则会被无视(详见官方介绍),所以可以使用 GitHub 推荐的 Jekyll 重定向插件 Jekyll Redirect From

GitHub Pages 默认支持该插件,在项目的 Gemfile 里添加引用即可:

1
gem "jekyll-redirect-from"

接着,在站点 404 页面的 YAML 头部添加跳转规则:

1
2
3
4
---
redirect_from:
  - /norobots/
---

具体的目录可以更具自己站点的实际情况定义,按照上述定义,访问${HOST_DOMAIN}/norobots/会直接返回 404 页面,从而保护了敏感目录。

Permalink 是 "Permanent link" 的缩写,意为“永久链接”,即浏览器访问站点资源的完整路径地址。对于 SEO 而言,越短越精简的 permalink 越容易被发现及提高排名。

Jekyll 理所当然的有对 permalink 提供模版支持。如果 page 的 permalink 没有定义,则默认值为:

1
/:categories/:year/:month/:day/:title:output_ext

详细的 permalink 可选值请参考 Jekyll 的 Permalink 介绍

如本文,默认 permalink 是:https://blog.cotes.info/developer/2018/10/30/the-seo-to-jekyll.html,很长的一串,对吧。SEO 建议 permalink 长度不超过 90 个字符,目录层次不超过 3 层,所以为了精简 permalink,计划去掉categories, year, month, day, output_ext

为了全局生效,在站点根目录_config.yml文件添加对permalink的赋值:

1
permalink: /:title/

上述变量表示:文件站内链接格式为/{{ page.title }}/,隐藏了静态文件的后缀,如.html。在末尾加/是为了区分带扩展名的访问:若 permalink 定义为/:title,访问/:title:output_ext是被允许的。

精简后,本文链接地址为:https://blog.cotes.info/the-seo-to-jekyll/,有效提高了 SEO 表现。

过程中曾担心只剩标题会不会引起文件名重叠,后来细想一下,post 的标题都是短句,机率很小,万一真有重名,可以末端添加数字区分。

值得一提的是,博客内部原有的带.html后缀的跳转 URL 也要相应修改,需要付出一定的时间去细心校验。

结语

本文只是对建站动态的阶段性小结,SEO 的玩法远不止这些,有兴趣可以自行查找更多资料。

参考链接

This post is licensed under CC BY 4.0 by the author.

罗马复兴之游牧术

Jekyll 集成 Travis CI

Comments powered by Disqus.