如何在hexo中配置keywords

最近偶然发现网站没有keywords,对于seo还是很有用的,怎么就没有呢,一检查不要紧,还真没有,这如何渲染出来携带keywords呢?

其实配置方式有很多种,这里只介绍两种。

修改主题模板

我这直接以next主题为例了,其他主题类似。

next/layout/post.njk这个文件路径就是文章详情页的基础模板,我们在大概第4行,增加keywords的代码即可

1
2
3
{% block title %}{{ page.title }} | {{ title }}{% endblock %}
// 以下为增加的keywords代码
{% block keywords %}{%- if page.tags and page.tags.length %}<meta name="keywords" content="{%- for tag in page.tags.toArray() %}{{ tag.name }},{%- endfor %}" />{%- endif %}{% endblock %}

当然了首页要加的话,使用类似的方式,不过首页直接调用的配置文件中的keywords,可以不用做循环了,相对来说更简单

修改hexo底层代码

代码位置:/node_modules/hexo/lib/plugins/helper/open_graph.js,大概第140行左右。

原始代码

1
2
3
4
5
6
7
8
9
10
11
12
if (keywords) {
if (typeof keywords === 'string') keywords = [keywords];

keywords.map(tag => {
return tag.name ? tag.name : tag;

}).filter(Boolean).forEach(keyword => {
console.log('keyword', keyword)
result += og('keywords', keyword);
result += og('article:tag', keyword);
});
}

修改后的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (keywords) {
if (typeof keywords === 'string'){
result += meta('keywords', keywords);
result += og('article:tag', keywords);
}else{
// 将[{name="aaa",……},{name="ccc",……},{name="ccc",……}]转换为"aaa,bbb,ccc"然后塞入keywords里
result += meta('keywords', keywords.map(obj => obj.name).join(','));
keywords.map(tag => {
return tag.name ? tag.name : tag;

}).filter(Boolean).forEach(keyword => {
result += og('article:tag', keyword);
});
}
}

大概意思就是,如果是字符串直接生成keywords代码,而如果是对象(文章内容页尾对象)则需要循环格式化关键词为字符串再生成keywords代码。