Jekyll 的 SEO 优化
近来对博客主题、架构改进的热情明显高于写文章,略有本末倒置的意味。愧疚感驱使笔者写下最近为站点做的一些 SEO 优化:
- 爬虫保护
- 目录访问保护
- permalink
爬虫保护
万维网上的站点,都会被搜索引擎爬虫抓取内容,以之作为搜索结果列表。搜索引擎会依据站点根目录的 robots.txt
所定义的规则,去抓取当前站点的内容。
对于运行在 GitHub Pages 的站点,GitHub 会默认生成一个文件 robots.txt
,内容为:
1
Sitemap: {SITE_URL}/sitemap.xml
其中 URL
表示站点 URL(如 https://example.com
),该文件定义了 sitemap.xml
文件的位置。
为了指示爬虫 Bot 不去抓取某些图片、文件等静态资源,可以在 robots.txt
中新增自定义的参数。在站点根目录新建文件 robots.txt
即可覆盖 GitHub Pages 自动生成的默认版本。然后添加爬虫指令:
指定 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/ # 零碎敏感文件、目录等放置在此
此时浏览器直接访问站点
{SITE_URL}/norobots/
还是可以看到文件列表的,达不到隐藏站点目录结构的目的,下文再作保护介绍。
最后要指定 Sitemap
的文件路径:
1
Sitemap: https://cotes.page/sitemap.xml
如果更换了域名,就要手动的更改 Sitemap
地址。此时可以使用 Jekyll 的全局配置变量取代硬编码:
robots.txt
文件顶部添加 Jekyll 的 Front Matter:
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"
接着运行 bundle
命令安装插件,安装完成后,在站点 404 页面的 YAML 头部添加跳转规则:
1
2
3
4
---
redirect_from:
- /norobots/
---
具体的目录可以更具自己站点的实际情况定义,按照上述定义,访问 {SITE_URL}/norobots/
会直接返回 404 页面,从而保护了敏感目录。
Permalink 优化
Permalink 是 "Permanent link" 的缩写,意为「永久链接」,即浏览器访问站点资源的完整路径地址。对于 SEO 而言,越短越精简的 permalink 越容易被发现及提高排名。
Jekyll 理所当然的有对 permalink 提供模版支持。如果 page 的 permalink
没有定义,则默认值为:
1
permalink: /:categories/:year/:month/:day/:title:output_ext
详细的 permalink
可选值请参考 Jekyll 的 Permalink 介绍。
如本文,默认 permalink 是:https://cotes.page/tech/website/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://cotes.page/the-seo-to-jekyll/
,有效提高了 SEO 表现。
过程中曾担心只剩
:title
会不会引起文件名重叠,后来细想一下,post 的标题都是短句,重复的机率很小,万一真有重名,可以在文件名末端添加数字区分。
值得一提的是,博客内部原有的带 .html
后缀的跳转 URL 也要相应修改,即:{SITE_URL}/path/to/post.html
修改为 {SIET_URL}/path/to/post/
,需要付出一定的时间去细心校验。
结语
本文只是对建站动态的阶段性小结,SEO 的玩法远不止这些,有兴趣可以自行查找更多资料。
Comments powered by Disqus.