网站建设

分享最近对网站外链跳转页面代码的一些改善

很久之前在博客分享了几篇关于外链跳转的代码或教程。如果没看过的可以先了解下: 分享两种外链跳转方法,可避免权重流失。 分享一个WordPress外链跳转教程,兼容知更鸟暗箱下载和文章索引 分享知更鸟Begin主题外链跳转代码,兼容下载按钮和弹出层上的外链 最近,有了一些灵感以及在其他博客也吸收了一些相关经验,就把现用的外链代码小改了下,感觉还不错,现在分享下,喜欢的可以试试。 Ps:不喜欢啰嗦的朋友请直接从第五步开始看。 一、安全加固 首先,加入了在鱼叔博客看到了的防止恶意请求的简单防护代码: 二、跳转方式 之前的代码使用的是html的refresh跳转方式: 正好之前分享百度是如何取消关键词的时候,curl到的是这样的一个结果: 百度使用了一个跳转方式,成功伪造了新的referrer来路,从而屏蔽了搜索关键词。 很明显上面的代码使用了html的refresh和JS两种跳转模式,而html的用到了noscript标签,也就是说当浏览器不支持js的时候才会使用html跳转的方式。 所以,我之前分享的跳转代码也可以参考改进下: 三、跳转加密 看过有博客对外链进行了一个Base64加密,所以我也加入了这次小改当中,而且还可以同时兼容不加密的跳转链接: 四、禁止收录 既然是外链跳转,肯定不希望被蜘蛛收录或抓取,所以多加入了一个禁止收录和抓取的META申明: 五、正式部署 ①、完整跳转代码 I、PHP版本 将以上代码保存为go.php上传到网站根目录即可。 II、JS版本 这算是这次的彩蛋吧!偶然的灵感,让我想到了其实可以用 js+html 纯静态来搞定这个跳转功能。测了又测,终于新鲜出炉!和PHP基本一致的功能,可以放心使用! 选择JS 版本将以上代码保存为 go.html 上传到网站根目录即可。 Ps:2个版本的功能是一致的,优缺点区别:PHP版本是动态的,会略微产生服务器的性能负载,而JS版本则需要浏览器支持JS才可以功能。不过目前来看,绝大部分浏览器都是支持的! ②、Nginx伪静态 之前的代码用的都是 “go.php?url=外链地址” 的形式,经常也看到有个别网站对外链跳转做了伪静态,也就是 “/go/外链” 这种形式。 这次,也试了下,感觉还不错,所以就整了下。只要在Nginx中加入如下规则即可: I、PHP版本 II、JS 版本 张戈博客 TIPS 实际上,将php版本保存为 index.php 或 将JS版本保存为 index.html,然后在网站根目录新建一个go文件夹,把 index.php 或 index.html 上传到go文件夹中,那么Nginx就可以使用一条通用规则了: 说白了,因为 index.php 或 index.html 是WEB读取的默认文件,其中 index.html 一般优先级比 index.php更高一些,所以只需要重写到go目录即可,至于你选择js版本还是php版本就看你index放的是php还是html了。 此段文字看不懂的话,请忽略之。 Ps:上述代码如果不知道放到哪,可以直接放在 location / { 的前面即可。加入伪静态规则,并且重启Nginx之后,我们就可以通过 "/go/外链加密串" 的方式进行跳转了。不过亲测发现无法使用 /go/https://zhang.ge/xxx 这样直接丢http地址的方式进行跳转,因为http://会读取为 http:/,少了一个斜杠,这个之前博客文章其实有提到过,这里就不深究了。 ③、Apache伪静态 还是有不少网站用的是Apache服务器,所以还是补充一下Aapace伪静态规则: 将上述规则代码添加到 .htaccess 文件的第一行即可。 ④、WordPress替换 做好了跳转页面,我们就需要将之前应用的相关函数都修改一下。其实就是将代码中的 /go/?url=外链 改成 /go/base64加密串 的模式,下面贴一下具体代码,请自行参考修改。 Ps:由于张戈博客需要兼容之前的 /go/?url= 的形式,所以现在用的是/goto/伪静态形式,无此需求的网站可忽略之。 A. 文章外链替换 B. 评论外链跳转 C.  下载外链跳转 用过之前外链跳转的网站,应该都有上述ABC代码,只要参考上述代码,修改一下替换后的链接形式即可。部署后,刷新前台文章或评论,就能看到效果了。 看了还是不太会的朋友,建议多看、多想、多动手、多搜索、少提问,这是网站折腾学习的不二法门!
阅读全文
网站建设

浅析网站更换ip或使用CDN会不会影响SEO排名

最近张戈博客在阿里云和腾讯云服务器之间来回折腾了数次,别的收获没有,就悟出了一个问题:网站更换IP或使用CDN会不会影响SEO收录或排名? 收录就不好意思说了,张戈博客这几个月内发布的文章基本都没收录。 一、更换IP 记得之前站长平台分享过一篇相关的文章,说的是只要用户可以访问的页面,百度就能正常抓取和收录,和网站服务器在国内还是国外、是否备案统统无关。而百度收录的好坏、百度关键词的排名和网站的稳定性及加载速度则息息相关。 那这篇文章再说更换IP有何意义?我想说的是网站更换IP并不会影响收录或排名,但是——这个有一定的条件。 ①、平滑过渡 肯定有不少站长朋友,在网站搬家,并更新DNS解析后,立马就把原来的服务器退了或关闭了。其实这是一个大坑。 网站搬家过的朋友可能都有这样的经验,在网站搬家后,我们会按惯例去百度站长平台使用一下抓取诊断工具,看看新的解析是否生效。 而懒散的百度一直以蜗牛著称,我们会发现你更换DNS解析之后,抓取诊断中显示的还是老服务器的IP,可能几天都换不过来。这个应该百度蜘蛛自身的一个DNS缓存优化吧! 所以,如果你立马就把老的服务器给停用了,那百度蜘蛛绝对有一部分会遇到闭门羹,后果你懂的。 在我们更换IP之后,当使用百度抓取诊断工具发现IP未变更时,我们可以如图点击【报错】,让百度刷新DNS缓存: 快的话可能半天就可以刷新过来了,慢的话可能需要1~2天!快和慢的情况我基本都遇到过。。。 当发现抓取诊断显示IP已经是最新的之后,我们需要回到老的服务器上去看网站日志,观察个1~2天,直到日志中没有如下所示的百度蜘蛛的抓取了,才算更换成功! Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) 这时候你才可以从容的停止老的服务器。 ②、稳定快速 稳定快速作为网站的基本素质,基本就不用多提了,更换后的服务器如果又慢还经常50x,蜘蛛肯定不会喜欢。所以,更换也是往好的方向,而不是越来越Low B才行! 二、使用CDN 以前张戈博客一直会说使用CDN之后需要多解析一个搜索引擎线路给蜘蛛专用。主要当时是认为CDN的节点很多,而且是动态修改的。也就是说使用了CDN就类似于我们的网站经常在更换IP! 那上面都说了更换IP对SEO没影响,为啥使用CDN需要多解析一个搜索线路到真实IP呢? 其实道理很简单,也并不是为了规避我之前提到的CDN的IP变来变去的情况,而是为了稳定! 上文提到了,百度蜘蛛服务器存在DNS缓存的情况(其实很多公司或集群都会有DNS缓存机制),如果我们使用CDN而不对蜘蛛回源,那么百度蜘蛛DNS缓存的就是CDN节点的IP! 那缓存了CDN节点IP有什么不对吗?也可以访问到我们的网站啊? 确实,缓存了CDN节点IP对访问没有任何影响,但唯一致命的是,CDN的节点可能随时都会撤销会更换IP!也就是说,这一小时蜘蛛通过一个IP为x.x.x.x的CDN节点访问到你的网站,可能下一小时这个CDN节点就下线了或换IP了!那么蜘蛛就无法访问你的网站了,只能等DNS刷新才行,这一等可能就是一两天哟! 当然,这种情况也不多见。保守起见,我们还是新增一条搜索引擎线路解析到真实IP比较靠谱。 好了,浅析到此告一段落,望你能有所收获!
阅读全文
网站建设

WordPress针对百度星火计划2.0原创保护的优化措施

今天在看百度站长平台的时候,发现1月18日发布了一篇介绍星火计划2.0的文章。仔细看了下,感觉到可用之处,就对张戈博客加了一些代码,算是针对性优化。 下面分享给大家,推荐使用! 一、星火计划 什么时候百度星火计划?其实我也是第一次听到,不过其内容肯定是像我这种原创博客都非常关心的——原创保护。 文章介绍中提到了什么是原创和伪原创,看得我都不想因为本文摘抄其内容而变成了伪原创了。所以感兴趣的可以自己点开看:http://zhanzhang.baidu.com/college/articleinfo?id=782 总之,百度星火计划就是对原创文章进行保护,让那些只会采集剽窃、甚至是篡改他人作品的网站统统死啦啦的。 就像文章说的一样(无奈,我还是要摘抄一下): 星火计划2.0项目的意义: 1,对于有转载的原创网页,百度搜索会从众多相同内容中识别出原创网页,使之在搜索结果中的排序不被对应的转载网页超越; 2,对于通过百度站长平台主动推送的原创数据,我们在识别成功后,会在搜索结果处进行“原创”标记 ,进一步凸显原创内容的价值,为原创者正名。 不过,对于是否真的不被超越,比如站长之家转载了张戈博客文章之类的,咱们拭目以待! 二、如何优化 文章的最后提到了网站针对星火计划能够进行的一些优化措施,具体为: ①、使用百度站长平台的主动推送链接功能 这是必须的,原创与否的先决条件肯定是谁发布的早!作为原创的我们,点击发布的同时立即向百度推送发布通知,告知这篇文章是从我们博客首发的,其他相同或相似的文章统统是转载或伪原创! 对于开启这个主动推送功能,有多种方式: 百度提供的通用js代码(貌似不支持https,会报错)【相关文章】 百度主动推送插件(张戈博客优化版)【相关文章】 百度主动推送代码(张戈博客原创版)【相关文章】 其中,第一个js代码适合所有建站程序,而且实现简单,推荐使用!后面一个是插件一个是代码,只适合WordPress,当然最终功能都一样,自行选择即可。 ②、在网站添加星火计划可识别的Meta标签 如下是百度文章中分享的DEMO: 会DIY的朋友基本不用往下看就能自己动手修改了吧?、 三、部署代码 将如下代码添加到 WordPress主题的 functions.php 当中即可在前台输出星火计划代码: 2016-05-20更新:补充适合360搜索的智能摘要Meta申明。 Ps:以上代码利用wp_head()函数将星火计划代码输出到前台,如果分享上述代码没有效果,说明你的主题未在header.php中调用 wp_head() 函数,请自行解决。 三、前台效果 成功加入代码后,刷新网站前台,然后查看源代码就能看到效果了: 五、其他说明 2016年02月13日发现百度站长平台发布了关于星火计划违规的通知【传送门】,看了下原来滥用星火计划也可能坏事。 所以,我们只需要提交原创文章,转载或整理分布的文章最好不要放置这个星火计划META申明。 那我们如何来控制是否放置代码呢?很简单,使用文章自定义栏目即可(上文代码已支持)! ①、自定义栏目 如果不是原创文章,我们可以新增一个自定义栏目,比如 author,值任意或者填写原文地址,而原创文章则不新增这个栏目: ②、回溯修改 接下来我们需要在非原创文章中新增自定义栏目author,值为非空任意值,比如就填写原文地址或数字等,这个随你了。否则,没有这个标签的文章都会当作原创处理! 好了,如上修改后,代码就只会在原创文章页面中插入星火计划的META申明了,不至于违反百度的游戏规则咯!
阅读全文
网站建设

利用JS生成二维码图片,优化WEB性能及页面加载速度

移动互联网的蓬勃发展绝对离不开二维码的“推波助澜”,一张小小的图片,省去了繁琐的苦逼输入,也拉近了PC端和移动端的距离!虽然是东洋人最初发明的,但我还是要给32个赞! 一、意淫场景 2年前接触网站建设后,二维码也进入了我折腾的范围,当时意淫了这样一个场景:当用户首次在别人电脑上看到我们的网站时,突然有事要离开,但是这个网页内容很赞,实在难以割舍,他该怎么办? 我继续意淫了多个解决办法: ①、复制这个网页,通过QQ发送到我的设备(那时候貌似还没有这个功能。。。) ②、收藏到类似QQ云收藏等在线收藏夹,或保存为文本存在云盘,以后再看 ③、死记硬背也要记住这个网页地址,然后回家继续看 ④、赶紧掏出手机,在手机浏览器里面输入网页地址继续看 。。。。 N、尼玛这网页为毛就不能提供一个二维码,让我用QQ浏览器扫一扫继续看呢? 很明显,在这种场景下,网页上如果能提供一个二维码就能给网站增加一个忠实访客,甚至是粉丝。 二、后台实现 我这人把,技术不行,但只要有想法就立马付诸实践,认为技术再难也不会是瓶颈。 博客用的语言是php,因为第一时间用php实现了这个功能,应用到网站就是这个样子: 源码也非常简单,感兴趣的看下:https://zhang.ge/5031.html 三、前台实现 本来这个PHP二维码用得挺好的,反正做了CDN缓存,速度负载都不用考虑。最近在一个国外的网站看一个源码的时候,好奇的看看网页的二维码是什么地址是,发现居然是canvas生成的! 是咯,为毛之前我没想到JS生成二维码这一茬呢? 果然还是想法和见识更重要啊!知道有这个途径,怎么实现基本是小菜一碟了。 顺手百度了一下,果然一堆教程,而且个个历史悠久,看来自己out怪不得别人。 实现很简单,DEMO如下: 丢到SAE试了下,效果还不错:http://atools.sinaapp.com/demo.html 更多参数如下: 四、中文兼容 从分享这个教程的博客那知道,上述JS生成二维码是不支持中文内容的,而少数个人博客可能会使用中文的url路径,那么就不适用了。 其实,要解决也挺简单,只要二维码编码前把字符串转换成UTF-8即可。 博主也提供相关JS转换代码: 因此,如果内容含有中文,就需要用这个函数先转码,比如前文的DEMO修改如下: 参考文章:http://suflow.iteye.com/blog/1687396 五、Begin主题 Ps:哈,突然发现鸟哥博客已经用上了,看来我们想到一起去了,相信begin新版本就会集成。 说了半天代码和demo,可能还是有很多朋友不会用,下面再简单介绍下把js生成二维码集成到Begin的方法。 Begin还是在上几个版本就已经集成了二维码图片功能,不过用的是外部api生成的,加载速度差强人意。当然,到了张戈博客,第一时间就换成了自建的php二维码api了。 现在get到了新技能,所以我也第一时间也将博客的二维码改成了js方式了,修改很简单: ①、加载js代码: 将上述代码添加到Begin主题的header.php或footer.php当中(也可以将上述js文件的内容合并到主题的全局js,比如scripts.js)。 ②、修改php代码: 编辑 begin/inc/scroll.php 这个文件,如下修改即可: 每个<li>代表一个按钮,上下位置自行按需调整即可。全部完成之后,彻底刷新各种缓存,就能看到前文贴图一样的效果了!其他主题只需参考折腾即可。 Tips: 上述代码也未加入中文兼容,如有需求,只需要继续增加兼容中文的 js 代码,然后把 content = window.location.href; 改成 content = utf16to8(window.location.href); 即可搞定。 六、兼容方案 前几天,鸟哥反馈我博客在IE8会导致整个浏览器卡死的问题!我苦逼定位了2个多小时才搞定! 定位方法非常苦逼: ①、先移除所有JS,测试依然卡B ②、移除wp_footer()输出,测试依然卡B ③、移除wp_header()输出,好了!! 尼玛,发现问题出现在头部输出里面,于是分别开启和关闭头部输出,得出头部输出内容,然后一项一项添加上去看是否会卡B。 最终,发现居然是一个我自定义的CSS代码导致的???原来是一个CSS属性的大括号被我写成了中文符号},真是R了狗了。。。 在测试中,我发现IE下无法生成二维码,于是脑补了下,发现IE不支持canvas模式,只支持table模式。 因此多写一个判断搞定: Ps:没错,这也是史上最短的IE判断,大家可以记录下,以备后用。 等使用table模式后,发现生成的二维码惨不忍睹,而且还扫不了: 后来和鸟哥交流的时候,他说是这主题table样式有冲突,重新下指定下二维码的table属性即可: 其实,table模式就是黑白表格组合原理,主题定义的表格样式把qrcode生成的二维码搞成了鬼样。 Ps:此项修复已加入到上一步Begin代码中,其他主题请自行参考。 七、对比分析 本文介绍的二维码是每个页面动态生成的二维码,扫码后打开的也是当前页面,但是不管是静态还是动态,图片加载的方式总是要产生一个http 请求的,当页面处于海量访问时就会带来一定的负载了。。。 但是,如果使用js生成二维码的方式,这图片就在前台浏览器生成的了。抛开JS的兼容性不说,在海量请求场景应该可以极大的减少http请求量吧? 当然,JS生成方式需要多载入一个Jquery.qrcode.min(通用JQ一般都有,就不算了)。看了下,这个JS只有13KB: 而且,我们完全可以把他合并到其他JS当中,那就连http请求都省了!可见,换成JS方式的性价比还是比较可观的!当然,JS的兼容性就另说了,这里就不多说了,感兴趣的可以试试。
阅读全文
网站建设

WordPress发布文章同步到新浪微博失败的问题解决与分享

张戈博客很久之前分享过一篇 WordPress发布文章同步到新浪微博 的文章,但经常有站长留言反馈同步失败,我一直觉得是代码部署问题。 最近很长一段时间,张戈博客也无法同步,我又觉得是微博自身的问题。直到近期抽空DeBUG了一下微博同步,取得了返回结果,才发现是由于网站IP变更导致的! 一、网站IP变更 如下是我DeBUG取得的返回 json 结果: 格式化如下: 其中“Ip Limit, request ip is not contained in safety ip”很明显的指出了错误原因:当前IP不在微博服务器白名单列表当中,说白了就是网站换了IP地址,和你之前申请微博应用时填写的IP不一致了! 前往新浪微博开放平台看了下,里面设置的IP果然还是之前的老IP: 所以,如果发现你部署了代码,却总是无法同步,请前往微博开放平台,如图查看并更正一下网站现用服务器的IP地址。 当然,修改后会进入二次审核状态,耐心等待好了。 Ps:其实最后我发现这里可以不填写任何IP,免得下次网站更换服务器又忘记修改了!反正大部分人也不怕自己的微博被盗用。 二、DeBUG 方法 如果,上述分享还不能解决你的问题,最后张戈再分享本文用到的DeBUG方法。 原理很简单,所谓的DeBUG就是取得微博同步的返回值,看下到底是什么原因不能同步。 DeBUG代码如下: 先根据自己微博修改以上代码中的微博 app_key、用户名、密码。 然后,将最后一句代码中的5082改成你博客已发布文章的ID。 最后,将代码保存为php文件(比如 test.php),上传到网站根目录并在浏览器访问即可看到微博同步返回的结果了! 能看到失败原因,相信问题已经解决了一半,是不是又学到了一招呢? 三、https导致失败 早上发现IP变更已经审核通过了,就更新文章试了下,还是没有同步成功!呐尼? 然后,又试了下DeBUG大法,发现返回如下: error:does multipart has image? 什么鬼?? 网上找了半天,基本都是说图片不是本地的,或者上传封装得不对之类的。 于是,强行将 $url 这个变量指定为具体图片地址,发现还是这个错误: $url= 'https://zhang.ge/logo.png'; 甚至,直接试了下图片的本地物理路径也不行。。。 最终,发现把https改成http就好了!!!原来不支持https图片? 那我把 $url 中的https强行替换成http就好了: 果然,替换后就成功了: 如果还是不行,请留言联系张戈!
阅读全文
网站建设

解决WordPress4.4.1不支持图片暗箱问题,Begin主题适用

前几天更新WordPress最新4.41版本之后,发现文章之前的图片暗箱弹出功能没了,而且之前设置好是缩略图尺寸也没了,直接就是最大尺寸。 看了下当前页面图片的源代码,发现变了: ①、很明显多了一个srcset属性 ②、Begin主题专用的图片暗箱标识:rel="example_group" 消失了。 所以,图片暗箱失效的原因就是这个暗箱属性 rel="example_group" 没了导致的。而我之前设置好的图片尺寸失效则是因为新增了 srcset 这个标签导致的。 简单了解了下,最新版 WordPress 加入srcset是为了更好的做到图片自适应,srcset这个属性细节,感兴趣的朋友可以自行了解下。 废话不多说,下面分享解决方法。 因为我之前有现成的缩略图代码,所以只要在缩略图代码里面多加入2条替换规则即可解决。 缩略图代码我就不分享了,感兴趣或有需求的朋友可以参考之前的文章: WordPress集成PHP缩略图,并开启Nginx缓存的方法 下面是本文相关代码: 如上代码,添加到主题的 functions.php 当中保存即可,若不在意或本身就是用完整尺寸图片,请如注释所述,去掉后面2条规则即可。 另外,上述代码只适用于需要 rel="example_group" 属性的暗箱功能,比如Begin主题。其他暗箱若发现不能功能,可以参考这个方法修复。 上述方法只是直接解决问题,但未研究如何从WordPress本身根治,比如暗箱标识是否是因为多了一个srcset属性导致的,如果是,完全可以修改暗箱代码兼容之。 还有,升级4.41之后,就算你禁止了任意尺寸的图片裁剪,WordPress依然会裁剪1份,也是为了srcset这个新玩意: 具体如何彻底取消,有时间我再摸索下,已经摸索出来的朋友也欢迎分享或留言告知。 好了,言简意赅,就这么多了,是否意犹未尽呢?自己体会。 2015-01-15 补充内容: 早上搜索了下WordPress去掉srcset,发现WP大学 已经发过教程了,我就当一下搬运工,贴一下去除代码,方便有需要的朋友: 不想改代码,也可以安装 Disable Responsive Images  插件解决。 那么,前文分享的代码可以修改如下(已集成WP大学分享的代码): 另外,我在搜索上述问题的时候,发现小松博客也分享了一个关于响应式图片相关问题,解决的是评论图片问题,我博客的评论由于很少贴图,所以暂时没发现这个问题。 若遇到此类问题可以前往参考解决:wordpress去掉评论响应式图片srcset属性
阅读全文