Posts Jekyll 的 SEO 优化
Post
Cancel

Jekyll 的 SEO 优化

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

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

爬虫保护

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

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

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

默认规则指向站点的 sitemap,为了告诉爬虫 bot 不去抓取某些图片、文件等静态资源,可以在robots.txt中新增自定义的指令。

首先在站点根目录新建文件robots.txt,接着添加爬虫指令:

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

1
User-agent: *

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

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

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

笔者的指令为:

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

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

最后要增加对 sitemap 的指令:

1
Sitemap: https://blog.cotes.in/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 默认支持该插件,在站点_config.yml中添加引用即可:

1
2
plugins:
  - jekyll-redirect-from

如果在本地开发环境运行测试,可直通过gem命令在本地环境安装:

1
$ gem install jekyll-redirect-from

然后在站点 404 页面的 YAML 头部添加跳转规则:

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

具体的目录可以更具自己站点的实际情况定义,按照上述定义,访问$(HOST)/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.in/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.in/the-seo-to-jekyll/,有效提高了 SEO 表现。

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

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

结语

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

参考链接

OLDER POST NEWER POST

Comments powered by Disqus.

Search Results