最近偶然发现网站没有keywords,对于seo还是很有用的,怎么就没有呢,一检查不要紧,还真没有,这如何渲染出来携带keywords呢?
其实配置方式有很多种,这里只介绍两种。
修改主题模板
我这直接以next主题为例了,其他主题类似。
next/layout/post.njk
这个文件路径就是文章详情页的基础模板,我们在大概第4行,增加keywords的代码即可
1 2 3
| {% block title %}{{ page.title }} | {{ title }}{% endblock %}
{% 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{ 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代码。