Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >hexo-butterfly-SEO优化

hexo-butterfly-SEO优化

作者头像
hahah
发布于 2022-06-14 13:26:33
发布于 2022-06-14 13:26:33
1.8K00
代码可运行
举报
文章被收录于专栏:爪哇学习日记爪哇学习日记
运行总次数:0
代码可运行

更新记录

2021-01-22

SEO优化说明:文章路径优化、百度/Google/必应等搜索引擎收录

2022-01-13

排查收录问题和数据分析

搜索引擎自定义域名调整:将原有github二级域名替换为自定义域名

hexo-butterfly-SEO优化

1.网站收录

​ 网站收录主要包括网站验证、链接提交两个核心步骤,此外还可扩展自动推送、robots、rel配置

hexo项目插件引入:生成站点地图

​ 分为手动提交和自动提交,此处采用sitemap方式自动提交

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 引入组件生成站点地图
npm install hexo-generator-seo-friendly-sitemap --save

# hexo sitemap配置网站地图(在hexo站的_config.yml文件添加配置)
sitemap:
    path: sitemap.xml # 索引地图路径
    tag: false # 标签页不添加到网站地图中
    category: false # 分类页不添加到网站地图中

​ 配置完成执行hexo g后会在站点根目录/public生成相应的sitemap.xml,部署网站后,提交到百度/谷歌

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 站点地图地址
https://域名/项目/sitemap.xml
  • 百度收录
  • 必应收录
  • google收录

百度收录:百度搜索资源平台

​ 上述步骤完成,在百度搜索框内输入site:域名,查看收录情况,如果没有收录则提交网址进行收录,登录百度账号->用户中心->站点管理->添加网站(输入网站、配置站点属性、验证网站)

​ 验证网站有多种方式,采用文件验证的方式,下载baidu_verify_code-xxxx.html验证文件,随后将文件放置在配置域名的根目录下,此处放置在hexo博客项目source下,每次打包发布则不会被覆盖。

​ 我采用的是CNAME验证的方式进行验证,根据提示将指定的记录使用CNAME解析到ziyuan.baidu.com即可(例如使用github二级域名则为code-xxxxxxx.用户名.github.io,如果是自定义域名则参考提示进行配置)。例如使用自定义域名可以通过DNSPOD进行解析

主机记录

记录类型

记录值

code-xxxxxxx.用户名.github.io

CNAME

ziyuan.baidu.com

  • 普通收录方式

验证通过之后则可进入普通收录页面,上传sitemap文件

​ PS:百度对 github 托管的 sitemap 不太友好,如果网站是使用 github page 发布,建议删掉百度站长平台的 sitemap ,用 API 主动提交,避免出现抓取失败,影响网站权重。用 API 推送后,索引量迅速回升

​ 如果需要搜索引擎收录网站,则需要对应搜索引擎的管理平台进行提交,各自的验证码可以从管理平台获取

  • API提交方式收录(curl/post/php/ruby等多种不同的方式进行推送)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.编写一个urls.txt文件,将要提交的链接按照每行一条的格式写入

# 2.git bash 执行curl:
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "推送接口API"

// 查看推送结果(具体可参考推送反馈)

字段

是否必选

参数类型

说明

success

int

成功推送的url条数

remain

int

当天剩余的可推送url条数

not_same_site

array

由于不是本站url而未处理的url列表

not_valid

array

不合法的url列表

必应:必应站长平台

​ 访问必应站长平台,可通过Google Search Console自动导入或者手动添加的方式构建(为了便于管理,可采用google账号登录链接或者用Microsoft账号登录绑定google search console)

​ 随后在Sitemaps选项卡中添加站点地图即可

google:Google Search Console

​ 进入Google Search Console

​ 登录->网址所有权验证

​ 域名验证参考文档说明:验证网站所有权验证域名(针对托管服务商)

DNSPOD 进行所有权验证

主机记录

记录类型

记录值

域名或者子域名配置对应

TXT

google提供的TXT验证

​ 站点地图->添加新的站点地图,填充站点地图地址即可

2.自动推送

构建说明

<1>配置各个搜索引擎的站长平台秘钥

<2>引入hexo-submit-urls-to-search-engine插件,主配置文件_config.yml中引入配置

<3>hexo clean & hexo g & hexo deploy 自动推送

配置参考

<1>配置各个搜索引擎的站长平台秘钥
  • baidu
  • bing
  • google

​ 登录百度搜索资源平台,访问用户中心->站点管理->普通收录->API提交(记录秘钥)

​ 对应的token则参考相应的推送接口URL中的token即可

​ 登录必应站长平台,访问设置->API access(API访问)->API Key(API秘钥)->Generate API Key,生成并记录API Key即可

​ (需访问国外网站)访问Google Indexing API ,根据提示在Google开发者平台创建项目、服务账号(IAM管理->服务账号),将服务账号添加为Google Search Console所有者,获取到相应的访问令牌

  • 创建项目
  • 添加服务账号(IAM管理->服务账号)

​ 填充账号信息,跳过权限(可选配置)设置相关,创建完成则“管理秘钥”->“添加秘钥”(创建新秘钥,选择JSON格式),随后保存下载的JSON秘钥即可(仅此一份需妥善保存)

​ 随后将获取到的 json 密匙文件放于 hexo 根目录(与hexo _config.yml文件位置相同)

​ 在此之前需要验证网站所有权,随后点击进入相应的内容添加所有者权限

​ 代理者服务账号:上述下载的JSON私钥中的client_email字段或者在服务账号管理页面中查看

<2>引入hexo-submit-urls-to-search-engine插件,主配置文件_config.yml中引入配置

引入插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install --save hexo-submit-urls-to-search-engine
  • _config本地配置
  • CI方式配置
  • 其他配置说明

文件配置

​ 为了避免token直接暴露在仓库中(尤其是针对公共的仓库,可以通过CI的环境变量设置记录秘钥保证安全性)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hexo_submit_urls_to_search_engine:
  submit_condition: count #链接被提交的条件,可选值:count | period 现仅支持count
  count: 10 # 提交最新的10个链接
  period: 900 # 提交修改时间在 900 秒内的链接
  google: 0 # 是否向Google提交,可选值:1 | 00:否;1:是)
  bing: 1 # 是否向bing提交,可选值:1 | 00:否;1:是)
  baidu: 1 # 是否向baidu提交,可选值:1 | 00:否;1:是)
  txt_path: submit_urls.txt # 文本文档名,需要推送的链接会保存在此文本文档里
  baidu_host: https://username.github.io # 在百度站长平台中注册的域名
  baidu_token: # 百度推送API秘钥(不建议直接发布在公共仓库)-token/0
  bing_host: https://username.github.io # 在bing站长平台中注册的域名
  bing_token: # 必应推送API秘钥(不建议直接发布在公共仓库)-token/0
  google_host: https://username.github.io # 在google站长平台中注册的域名
  google_key_file: Project.json # 存放google key的json文件(不建议直接发布在公共仓库)
  google_proxy: http://127.0.0.1:8080 # 向谷歌提交网址所使用的系统 http 代理,填0不使用
  replace: 0  # 是否替换链接中的部分字符串,可选值:1 | 00:否;1:是)
  find_what: http://xxx.github.io/blog
  replace_with: https://xxx.com

​ 上述配置完成,执行hexo g指令会生成txt文件存储要推送的连接,可检查文件内容是否正常

配置步骤说明

<1>在hexo_submit_urls_to_search_engine:的配置项baidu_token:bing_token:处填写0

<2>设置环境变量BAIDU_TOKENBING_TOKEN,值为已获取的token

​ 此处可构建Travis CI配置,自动部署hexo项目,使用Travis持续集成

<3>如果使用 Github Action ,还需在 yml 文件中设置环境变量

​ github对应hexo发布仓库:Settings->Secrets->Actions->New repository secret

参数

说明

BAIDU_TOKEN

根据文档指示生成

BING_TOKEN

根据文档指示生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# github action自动部署,对应yml文件配置
- name: xxxx #随便填
  env:
    BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} # 注意此处配置
    BING_TOKEN: ${{ secrets.BING_TOKEN }} # 注意此处配置
  run: |
    npm i -g hexo-cli # 安装hexo
    npm i
    ……
    hexo deploy

<4>hexo clean && hexo generate && hexo deploy自动推送

注意事项

​ 如果使用CI自动部署,则必须在每个页面的front-matter中配置updated属性用于标示hexo修正文章最后更改时间(如果没有指定,则hexo读取文件属性是以CI自动部署概念git资源clone的时间为参考,从而导致修改时间显示异常)

​ 此外区分本地部署和CI部署,如果是本地部署则需指定BAIDU_TOKEN、BING_TOKEN的值,如果是CI部署则将baidu_token&bing_token设置为0并配置相应的环境变量(Github Actions、Travis CI);还需区分Google环境配置是否正常(本地通过google key直接配置),CI则相应考虑对应的配置是否正常,一一排查,需注意不同环境部署的切换触发的不同结果,根据响应结果进行排查

​ 如果三种方式都要满足,则相应要满足对应的条件:

参数配置

本地部署

远程

配置开关baidu\bing\google

1

1

baidu_token

对应token值

设置为0并配置CI环境变量

bing_token

对应token值

设置为0并配置CI环境变量

baidu_token

google key引入、代理服务支持(可引入本地代理)

google key引入、代理服务支持(需集成代理环境)

google_proxy:向谷歌提交网址所使用的系统 http 代理

​ 格式:http://proxyhost:port

​ Hexo 部署于境外可填 0 不使用。使用访问国外网站软件,proxyhost一般为127.0.0.1port可在软件中查看设置,一般为8080。Win10 可在 设置->代理处查看

replace:URL替换

​ 针对域名解析的情况可将生成的github.io类型的url替换为对应的自定义域名,或者将中文域名替换成转码后的域名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
replace: 0  # 是否替换链接中的部分字符串,可选值:1 | 00:否;1:是)
find_what: http://xxx.github.io/blog
replace_with: https://xxx.com

发布

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 配置_config.yml deploy属性(通过"-"符号区分不同的发布url)
deploy:
- type: cjh_google_url_submitter
- type: cjh_bing_url_submitter
- type: cjh_baidu_url_submitter

# 配置完成执行hexo deploy指令则可自动推送链接
hexo deploy
  • 响应结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# baidu
Baidu response:  {"remain":2999,"success":1}

# bing
Bing response:  { d: null }

# google
Google response:  {
  urlNotificationMetadata: {
    url: 'url',
    latestUpdate: {
      url: 'url',
      type: 'URL_UPDATED',
      notifyTime: '2021-02-11T04:59:54.251941474Z'
    }
  }
}
<3>hexo clean & hexo g & hexo deploy 自动推送

​ 指令执行完成,可查看响应状态(根据响应报文检查数据推送是否正常),搜索引擎每天有一定数量的链接提交限制,如果是提交失败的url则相应进行检查,手动修改自动提交的txt文件中的url,去除已经成功推送的内容,随后重新尝试推送即可

结果查询

索引查询

​ 打开任意搜索引擎,输入site:网站,访问是否正常,如果是新站索引量0->1需要一定的时间,收录速度也收其他因素影响

推送记录查询

​ 登录相应的站长平台,随后访问对应网域资源,查看统计数据统计

百度资源平台必应站长工具谷歌站长工具

3.优化项

添加rel

​ 为网站使用到的所有外链添加rel=”noopener external nofollow noreferrer”, 可以有效地加强网站SEO和防止权重流失

  • 装载组件:hexo-filter-nofollow
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i hexo-filter-nofollow --save
  • 修改主配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nofollow:
  enable: true
  field: site
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【地铁上的设计模式】--行为型模式:迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种遍历聚合对象中各个元素的方法,而不需要暴露该聚合对象的内部表示。这个模式分离了聚合对象的遍历行为,使得遍历算法能够与聚合对象分离开来,从而可以在不改变聚合对象的情况下定义新的遍历操作。迭代器模式由迭代器接口、具体迭代器类、聚合接口和具体聚合类等组成,其中迭代器接口定义了访问和遍历元素的方法,而聚合接口定义了创建迭代器的方法。迭代器模式的实现可以大大简化遍历聚合对象中元素的代码,同时也可以方便地新增不同类型的迭代器,从而为聚合对象提供不同的遍历行为。
喵叔
2023/05/09
3700
设计模式--迭代器模式
迭代器模式是一种行为型设计模式,它允许客户端遍历一种容器(如列表或数组)中的元素,并访问容器中的每个元素,而无需关心容器的内部实现。迭代器模式属性于单一职责原则,因为它将遍历和容器分离开来。
软件架构师Michael
2023/07/19
2800
[设计模式]之九:迭代器模式
迭代器分离了集合对象的遍历行为,抽象出一个迭代器负责。这既可以不暴露内部结构,也让外部代码透明地访问集合内部数据
wOw
2018/09/18
2540
[设计模式]之九:迭代器模式
设计模式之迭代器模式
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
beginor
2020/08/10
3080
设计模式之迭代器模式
迭代器模式
一、简介 1、迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 2、类成员 (1)Iterator(迭代器)迭代器定义访问和遍历元素的接口 (2)ConcreteIterator (具体迭代器)具体迭代器实现迭代器接口对该聚合遍历时跟踪当前位置 (3)Aggregate (聚合)聚合定义创建相应迭代器对象的接口 (4)ConcreteAggregate (具体聚合)具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例 3、现在的高级
用户1215536
2018/02/05
5960
迭代器模式
Design Patterns 20 - 迭代器模式
迭代器模式, 提供一种方法顺序访问一个聚合对象中各个元素, 而又不暴露该对象的内部表示.
Reck Zhang
2021/08/11
1560
设计模式 | 迭代器模式及典型应用
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。
小旋锋
2019/01/21
6120
Java描述设计模式(13):迭代器模式
一、迭代器模式 1、基础概念 迭代器模式又叫游标模式,是对象的行为模式。迭代器模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。 2、模式图解 3、核心角色 Iterator:迭代器角色
知了一笑
2019/09/24
3920
Java描述设计模式(13):迭代器模式
迭代器模式[通俗易懂]
迭代器模式 ,提供一种方法顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
全栈程序员站长
2022/07/10
2810
迭代器模式[通俗易懂]
迭代器模式
今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所以在我们实现迭代器模式的时候实际上就是在实现一个迭代器类。 我们先来了解何为迭代器?其实你把它简单理解为for循环也没什么问题,可以说是它是for循环的高级形式。它提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。我们为它提供开始、下一个、是否结束等方法。 定义一个迭代器接口,包含以下方法。 1 package day_28_
用户1148394
2018/01/09
6250
迭代器模式(Iterator)
迭代器模式(Iterator) 迭代器模式(Iterator)[Cursor] 意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。 应用:STL标准库迭代器实现、Jav
Florian
2018/02/05
5510
迭代器模式(Iterator)
PHP设计模式之迭代器模式
一说到这个模式,就不得不提循环语句。在《大话设计模式》中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得。任何语言都有这种类似的语法可以方便快捷的对数组、对象进行遍历,从而让迭代器模式从高高在上的23大设计模式中的明星慢慢成为了路人。特别是我们这门PHP语言,PHP的强大之处就在于对于数组的灵活操作,本身就是hashmap的结构,自然会有各种方便的数组操作语法,而foreach也是我们最常用的语句,甚至比for还常用。
硬核项目经理
2019/08/23
5070
PHP设计模式之迭代器模式
Python设计模式(10):迭代器模式
在面向对象的软件设计中,如果一个系统有比较复杂的数据结构,客户程序往往没有必要详细地知道其内部的实现。为了使用方便,该系统应该提供给客户程序一种遍历方法。该遍历方法类似于使用电视机遥控器来浏览电视频道,客户程序只要按照顺序调用 next()方法即可得到相应的数据。本节介绍如何给复杂的聚合型数据结构提供一个遍历方法的设计模式——迭代器模式(Iterator Pattern)。
不可言诉的深渊
2019/07/26
7780
小谈设计模式(21)—迭代器模式
主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
学编程的小程
2023/10/11
1740
小谈设计模式(21)—迭代器模式
设计模式实战-迭代器模式,最常用的设计模式之一
迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是最常被使用的几个模式之一,被广泛地应用到 Java 的 API 中。例如,Java 的集合(Collection)框架中,就广泛使用迭代器来遍历集合中的元素。
架构师修炼
2020/07/17
6270
设计模式之迭代器模式(行为型)
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor),所以迭代器模式是一种对象行为型。
SmileNicky
2019/04/22
3510
迭代器模式 迭代器模式
提供一种顺序访问集合的元素而不暴露其底层表示的方法。 ——《设计模式:可复用面向对象软件的基础》
mingmingcome
2021/12/09
6720
迭代器模式
    





        迭代器模式
设计模式——迭代器模式
设计模式——迭代器模式
Java架构师必看
2021/05/14
3650
设计模式——迭代器模式
Java设计模式(十六)----迭代子模式
迭代子模式 一、 概述 二、 结构 1.白箱聚集与外禀迭代子 2.黑箱聚集与内禀迭代子 主动迭代子和被动迭代子 静态迭代子和动态迭代子 Fail Fast Fail Fast在JAVA聚集中的使用 迭代子模式的优点 一、概述 1.定义 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的
汤高
2018/01/11
7370
Java设计模式(十六)----迭代子模式
一起学设计模式 - 迭代器模式
迭代器模式听起来可能感觉很陌生,但是实际上, 迭代器模式是所有设计模式中最简单也是最常用的设计模式,正是因为太常用了,所以导致很多人忽略了它的存在。
battcn
2018/08/03
2990
一起学设计模式 - 迭代器模式
推荐阅读
相关推荐
【地铁上的设计模式】--行为型模式:迭代器模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验