本文首发于青云工作室

原文链接为 https://qystudio.ltd/posts/25250.html

前言

或是出于优化 SEO,或是出于加强网站体验,很多博客都给文章中的外部链接加上了个二次跳转,本博客也不例外。

在逛别人的博客的时候,发现了有一种叫go.php的东西,可以经过自己站点的网页再跳转出去,方便SEO优化。但是像Hexo这类静态博客,想要从源HTML修改链接难度有点大,这里我们采用JavaScript动态修改

部署

点我fork此仓库,然后在vercel中部署

使用他部署

修改

打开js/index.js修改个人信息


$(document).ready(()=>{ console.log("Running...") if(window.location.hash===""){ document.getElementsByClassName("loading-text")[0].innerHTML = "参数错误,将跳转回青云工作室<dot>...</dot>" setTimeout(()=>{ window.location.href = "https://qystudio.ltd/"/* 这里 */ },5000) return; } let reg = new RegExp(/#(.*)/g); let base64 = reg.exec(window.location.hash) let link = window.atob(base64[1]) let referrer = document.referrer.split('/')[2]; referrer = referrer===undefined?"":referrer.split('.') if(referrer[referrer.length-2]+'.'+referrer[referrer.length-1]!="pai233.top" || document.referrer===""){ swal.fire({ title: "确定访问?", text: "该网址不属于青云工作室,你确定要打开"+link+"吗?",/* 这里 */ type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "确定", cancelButtonText: "取消", }).then(function(isConfirm){ console.log(isConfirm) if (isConfirm) { console.log('setTimeout') setTimeout(function(){ window.location.href = link },3000) } else { window.opener=null; window.open('','_self'); window.close(); /* 微信浏览器关闭 */ WeixinJSBridge.call('closeWindow'); } }) }else{ setTimeout(function(){ window.location.href = link },3000) } })

打开js/checker.js


$(document).ready(function(){ checkLink(); }); // 若博客启用了Pjax请去掉注释。 // $(document).on('pjax:complete', function () { // checkLink(); // }); async function checkLink(){ let link = document.getElementsByTagName('a'); for(var i=0;i<link.length;i++){ //如果你的博客添加了Gitter聊天窗,请去掉下方注释 if(link[i].href==="" /*|| link[i].className==="gitter-open-chat-button"*/)continue; if(!await checkLocalSite(link[i].href)){ link[i].href = "[你的Go Jumper的部署地址]#"+window.btoa(link[i].href) //console.log("edit.") } } } async function checkLocalSite(url){ try{ //console.log("check:",url) let reg = new RegExp(/\/\/(.*)\//g) let domain = reg.exec(url)[1].split('/')[0].split('.') //console.log(domain,domain[domain.length-2]+'.'+domain[domain.length-1]) domain = { //二级域名请去除下一行的注释 check: (/*domain[domain.length-3]+'.'+*/domain[domain.length-2]+'.'+domain[domain.length-1]).split('/')[0], original: domain } //console.log(domain)/* 这里 */ if(domain.check==="qystudio.ltd" || domain.original[0].split('/')[0]==="localhost:4000")return true;//将domain.check修改为根或二级域名,domain.original[0].split('/')[0]修改为本地测试页面 return false; }catch(err){ return true; } }

引入

最后在博客的_config.yml中引入

例如vlts的


import: script: - <script src="https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js"></script>

如果你的主题不支持引入那么可以在head里添加


<script src="https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js"></script>

结语

这样,当博客加载完毕的时候,博客的全部外链就会被加上二级跳转,但是源HTML里的外链不变。可以优化 SEO和加强网站体验

给博客加入链接安全跳转页(添加一个和CSDN一样的链接跳转页)的更多相关文章

  1. 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?

    前言 OK,我也来造轮子了 博客系统从一开始用WordPress,再到后来用hexo.hugo之类的静态博客生成放github托管,一直在折腾 折腾是为了更好解决问题,最终还是打算自己花时间搞一个好了 ...

  2. 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮

    周五公司事不是很紧,打算好好弄下自己的博客,这是自己学习和记录分享地方, 首先请记得申请js权限,默认不支持的,博主是已经申请通过后的样子 接着先选择cnblogs一个现有的模板,我这个就是在他的模板 ...

  3. VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲 ...

  4. 简洁美观的Java博客系统Tale开源了,让每一个有故事的人更好的表达想法

    Tale Tale的英文含义为故事,我相信每个坚持写Blog的人都是有故事的:中文你叫它 塌了 也无所谓 . Tale 使用了轻量级mvc框架 Blade 开发,默认主题使用了漂亮的 pinghsu, ...

  5. 夺命雷公狗---node.js---20之项目的构建在node+express+mongo的博客项目5mongodb在项目中实现添加数据

    我们上一步就引入了mongodb了,那么下一步就要开始写添加数据了,不过有个前提是先将表单的数据处理好: 最基本的这部现在已经成功了,因为最基本的这步就是先将表单处的提交方式和提交地址给处理好,这里和 ...

  6. 搭建自己的技术博客系列(一)使用 hexo 搭建一个精美的静态博客

    1.安装 Git 和 nodejs https://hexo.io/zh-cn/docs/

  7. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  8. 【全网最全的博客美化系列教程】01.添加Github项目链接

    全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...

  9. 【全网最全的博客美化系列教程】02.添加QQ交谈链接

    全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...

随机推荐

  1. 【PTA】5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即“小时:分钟:秒”,当小时等于24小时,置为0。

    5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即"小时:分钟:秒",当小时等于24小时,置为0. #include <stdio.h> ...

  2. VictoriaMerics学习笔记(1):翻译官方广告

    先看看VictoriaMetrics官网网站上是如何作(tree)宣(new)传(bee)的: 官方广告 0.(监控领域)最快解决方案 为高性能而设计 便于安装 支持单机和群集版本 1.更高效的存储空 ...

  3. CMake语法—普通变量与函数(Normal Variable And Function)

    目录 CMake语法-普通变量与函数(Normal Variable And Function) 1 CMake普通变量与函数示例 1.1 CMakeLists.txt 1.2 执行CMake配置脚本 ...

  4. C++多线程之可重入锁

    #include<iostream> #include<thread> #include<mutex> using namespace std; recursive ...

  5. linux主机名称文件修改

    目录 一:linux主机名称查看与修改 1.查看自己主机名: 3.临时修改 4.永久修改 一:linux主机名称查看与修改 1.查看自己主机名: [root@localhost ~]# echo $H ...

  6. CPU飙升排查

    怎么排查CPU飙升 线上有些系统,本来跑的好好的,突然有一天就会出现报警,CPU使用率飙升,然后重启之后就好了.例如,多线程操作一个线程不安全的list往往就会出现这种现象.那么怎么定位到具体的代码范 ...

  7. Spring源码-IOC部分-自定义IOC容器及Bean解析注册【4】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  8. HowToDoInJava 其它教程 2 · 翻译完毕

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 JMS 教程 JMS 教 ...

  9. 张高兴的 .NET IoT 入门指南:(七)制作一个气象站

    距离上一篇<张高兴的 .NET Core IoT 入门指南>系列博客的发布已经过去 2 年的时间了,2 年的时间 .NET 版本发生了巨大的变化,.NET Core 也已不复存在,因此本系 ...

  10. AT2699 [ARC081D] Flip and Rectangles

    以下是简要题解: 首先思考如何判定一个矩形是否能通过操作变成全黑. 首先从简单而又特殊的 \(2 \times 2\) 的矩形开始,不难发现只要其中黑色数量不为奇数即可. 近一步拓展可以发现,一个矩形 ...