新增关键字Keywords功能
Closed this issue · 1 comments
JunKuangKuang commented
新增关键字Keywords功能
预期行为
在文章配置中支持keywords字段,在生成页面后能够存在keywords元标签,方便SEO。
环境版本
Node@18.15.0
Stun@2.8.0
Hexo@6.3。0
实际行为
只是在站点配置文件中指定了Keywords字段内容后,在生成时并没有生效。
在文章中配置了keywords字段没有生成元标签。
尝试开发
我考虑后觉得自行开发也能做到,甚至为此读了源码。
修改了主题文件/stun/layout/_partials/head/head.pug
,内容如下。
var keywords = config.author + ',' + config.title;
var title_suffix = ' | ' + title;
if (is_home()) {
title = title + ((theme.index_subtitle && subtitle) ? (' | ' + subtitle) : '');
keywords = keywords + ',' + config.keywords;
} else if (is_archive()) {
title = __('title.archive') + title_suffix;
keywords = keywords + ',' + config.keywords + ',归档';
} else if (is_category()) {
// 分类下的某个子分类页面
title = __('title.category') + ': ' + page.category + title_suffix;
keywords = keywords + ',' + page.category;
} else if (is_tag()) {
// 标签页下的某个子标签页面
title = __('title.tag') + ': ' + page.tag + title_suffix;
keywords = keywords + ',' + page.tag;
} else if (is_post()) {
// 普通单篇博客title
title = (page.title || __('post.untitled')) + title_suffix;
// 普通单篇博客keywords
if (typeof page.keywords === 'undefined') {
// 没有在文章内指明keywords字段的文章,那就用tag标签和分类标签
// 判断page.tags.constructor之后是class _Query extends Query {}
// 一个后端程序猿不会处理这个类型,所以附上伪代码如下
//- if (page.tags && page.tags.length > 0) {
//- each tag in page.tags
//- keywords = keywords + ',' + tag
//- }
}else{
keywords = keywords + ',' + page.keywords;
}
} else {
if (page.type === 'tags') {
// 标签页
title = __('title.tag') + title_suffix;
keywords = keywords + ',标签';
} else if (page.type === 'categories') {
// 分类页
title = __('title.category') + title_suffix;
keywords = keywords + ',分类';
} else {
// 类似‘关于页’,‘图像页’等其他单独生成的网页
title = page.title + title_suffix;
if (typeof page.keywords !== 'undefined') {
keywords = keywords + ',' + page.keywords;
}
}
}
meta(name="keywords" content=keywords)
但是在开发和调试的过程中发现,当我想要实现没有在文章内指明keywords字段的文章,那就用tag标签和分类标签的功能时,一直没办法处理 page.tags 字段,核对后确定了是class _Query extends Query {}类型。
涉及了知识盲区,所以请求大佬开发这个功能,核心点就在于如何遍历读取这个对象。逻辑已经实现了。
另外,感激大佬开发的这个好用的主题,再多问一句有没有pug开发的推荐学习资料?视频或者文档都好,主要是想学习如何调试整个项目而不是一遍又一遍地去清理、生成、重启Hexo服务的琐碎行为。
JunKuangKuang commented
翻看了Pug的官方文档:https://www.pugjs.cn/api/getting-started.html
但是也没找到如何debug调试pug文件,捂脸哭泣。
我是一个一个字段尝试出来的,因为在修改的过程中,我都不知道获得的是什么对象,更别说拿到一个神秘对象的属性值了。
更多的是巧合,最终成功的代码内容如下。
var keywords = config.author + ',' + config.title;
var title_suffix = ' | ' + title;
if (is_home()) {
title = title + ((theme.index_subtitle && subtitle) ? (' | ' + subtitle) : '');
keywords = keywords + ',' + config.keywords;
} else if (is_archive()) {
title = __('title.archive') + title_suffix;
keywords = keywords + ',' + config.keywords + ',归档';
} else if (is_category()) {
//- 分类下的某个子分类页面
title = __('title.category') + ': ' + page.category + title_suffix;
keywords = keywords + ',' + page.category;
} else if (is_tag()) {
//- 标签页下的某个子标签页面
title = __('title.tag') + ': ' + page.tag + title_suffix;
keywords = keywords + ',' + page.tag;
} else if (is_post()) {
//- 普通单篇博客title
title = (page.title || __('post.untitled')) + title_suffix;
//- 普通单篇博客keywords
if (typeof page.keywords === 'undefined') {
//- 普通单篇博客没设置keywords,修改为标签和分类
if (page.tags && page.tags.length > 0){
page.tags.forEach(function (tag) {
keywords+=',';
keywords+=tag.name;
});
}
if (page.categories && page.categories.length > 0){
page.categories.forEach(function (category) {
keywords+=',';
keywords+=category.name;
});
}
}else{
//- 普通单篇博客已经设置keywords,替换中文逗号
page.keywords.split(',').forEach(function (keyword_item) {
keywords+=',';
keywords+=keyword_item;
});
}
} else {
if (page.type === 'tags') {
//- 标签页
title = __('title.tag') + title_suffix;
keywords = keywords + ',标签';
} else if (page.type === 'categories') {
//- 分类页
title = __('title.category') + title_suffix;
keywords = keywords + ',分类';
} else {
//- 类似‘关于页’,‘图像页’等其他单独生成的网页
title = page.title + title_suffix;
if (typeof page.keywords !== 'undefined') {
keywords = keywords + ',' + page.keywords;
}
}
}
meta(name="keywords" content=keywords)