此文是共有9部分的《重新设计StevePavlina.com网站》系列文章的第7部分。
WordPress插件
除了自行编写两款WordPress插件,这个设计项目的一大部分工作,也涉及调查、测试、选择和配置其他可以用在我网站上的优质插件。
在我写作这篇文章时,WordPress的插件目录里有不止44000款插件。这个数量多到单个人很难探究完全。所以在寻找优质插件方面,我会依靠几项简单规则:
- 个人推荐 — 我非常重视他人推荐,尤其是其他开发者和WordPress用户的推荐。在每月举办的拉斯维加斯WordPress见面会上,我已了解到几十款不同插件。大家聚会见面的地方有免费互联网,而且还是由世界最大的数据中心之一提供服务,所以网速超快。当人们在见面会上分享插件使用经验时,我常会立刻在自己笔记本电脑上安装试用。干嘛要等晚点再试?
- 高下载量 — 我经常回避使用下载量不足一万次的插件。对于那些下载量超过十万次的插件,我则会额外关注。若有很多人在用同一款插件,这就是个好迹象。通过在WordPress的插件目录(或在自己网站的管理后台,两者使用同一个插件目录)进行关键词搜索,我找到过一些好插件。之后我会查询有着高下载量的插件列表。
- 高评分 — 假如一款插件的用户评分不到4或5分,我通常不会麻烦自己去试用。我还会留意每款插件有多少次评分。如果没有几百次评分,我也希望能看到至少几十次评分记录。若到目前为止仅有几次评分,我就会略过这款插件。
- 最近更新日期 — 若看到一款插件已有多月或多年没有更新,我便想知道它是否已被开发者放弃。这可能意味着若选用这款插件,自己会有潜在的安全和兼容性风险。我喜欢那些近期有过更新的插件,这说明开发者仍在积极维护它。不过有些插件只用于添加非常简单的功能,并不需要频繁更新,我也会考虑这种因素。
以上所有信息,都能通过看一眼WordPress插件目录里每款插件的公开列表得知。这些都是简单指导方案,对于用过一段时间WordPress的人士而言算是常识。借助它们,我可以避开盲目选择低质插件的风险。
我还会努力避开有过度锁定问题的插件,只要使用这类插件一段时间,用户将很难再换用其他更有竞争力的插件。我之所以经常回避使用会在文章里插入短代码的插件,这也是原因之一。如果以后卸载这种插件,那些短代码就不再管用,读者便会在我的文章里看到各种代码碎片。自己最后必须从使用它们的所有文章里,删除或替代这些短代码。
我寻找的那些插件,要使自己预想它们能够长寿。我会问自己,这款插件五年后仍会存在吗?假如对此存疑,我便会挑选其他插件。我也总能在以后回头查看一款貌似有前途的插件,从而验证它是否真有生命力。
有些插件不到一分钟就能安装激活,无需配置便可添加相应功能。另有些插件有着基本的配置界面,需要用户自定义一些选项。还有些插件有多个配置界面,提供复杂的配置选项。我通常喜欢在安装之后,就马上查看所有选项并完成自定义设置。这种做法会帮我理解插件具备的所有能力。有时若想要拓展功能,或改变插件内建的选项功能,我会通过Google搜索来实现此目的,比如让插件适用于我网站上News(新闻)区块那样的自定义类型文章,而非只能用于标准博客文章。许多插件都可改动,但因做成此事通常需要应用一些额外技能,插件的标准文档中才没有包括说明。
下面让我来分享一些自己使用的具体插件,以及我为何使用它们。
Jetpack
Jetpack是一套由WordPress团队创作和维护的几十款插件组合。基本上,Jetpack就是给像我一样的自托管博客,提供此前只在WordPress.com托管的网站上才可使用的各项插件功能。
安装Jetpack后,你可以单独启用或禁用其中的每款插件。大多数Jetpack插件都能免费使用,另外还有些优质付费插件。目前我只在使用Jetpack的免费插件。
我不会介绍自己使用的每款Jetpack插件,因为其中大部分都相当基本,但我将分享一些已经启用的重要插件。
Photon是Jetpack里的免费Content Distribution Network(CDN,内容分发网络),它能通过把网站里的图片分发到世界上的不同服务器,来加快网站图片的载入。由于我的网站图片不多,自己并未注意到这个插件带来的明显载入速度提升。但对于一个图片量巨大的网站而言,此插件将非常有用。单击选中便可启用这款插件,所以它使用起来非常容易。
Protect插件将帮助保护你的网站免受暴力破解。根据我的数据显示,Protect插件已在过去3周里,阻拦了不止5300次的恶意登录企图。其中大部分几乎都来自bots程序(能执行外部命令的自动运行型木马程序。译者注),它们会在互联网上搜寻防护脆弱的WordPress博客。稍后我将在这篇文章里分享更多安全方面的知识。
Monitor插件用于报告网站的宕机时间。若你的网站由于某种原因导致下线,Jetpack的服务器便就在几分钟内发送一封电邮,让你知道此事。
Subscriptions插件能让人们通过电子邮件订阅你的博客。我最近刚添加了这项功能,你若喜欢,现在就能通过电子邮件收到我的新博客文章。
与我上面提及的相比,Jetpack还有许多插件功能,我鼓励你自己前去查看。若你想把网站与自己的社交媒体账户关联起来,其中一些插件将尤其有用,比如让新博客文章的链接自动分享到你的Twitter和Facebook账户。
相关博客文章
有一类插件可以在每篇博客底部添加相关博客文章。当一位读者看完某篇文章后,可能还想继续看更多相关话题文章。我多年来都一直在使用这种插件,很多人告诉我,这也是他们一口气会阅读我网站数小时的一个原因。
许多年前,一个年青人对我说,他在网站搜索自杀方式时,无意中发现了我的网站。最后一夜间读了我的文章5-6个小时,等他看完那些文章后,自己获得了一种更深的人生目的感,并决心继续活下去。所以我有着充分理由,需要严肃对待网站的这项功能。
我曾用来实现这项功能的插件似乎已被放弃开发,所以我决定寻找一款仍在维护中的插件。
其中一款流行插件是Contextual Related Posts。它的安装和配置看起来都没问题,但尽管尝试过许多不同的解决办法,我永远难以让它生成正确的相关文章。它似乎会在每篇文章下显示几乎完全一样的推荐文章,有些文章之间明显毫无关联。从网上寻找帮助时,我发现其他人好像也有类似问题,除了尝试我已试过的所有办法,比如重新生成索引文件,并安装同类插件来尝试不同推荐方案,这些人也没有好的解决办法。我还发现它很耗计算资源,鉴于这些麻烦问题,我放弃使用并决定寻找替代方案。我担心的是,即使它现在工作正常,那些问题晚点也可能重新出现。如果选用它,我无法预测未来会有平稳的使用效果。
我最终选用了Jetpack里的Related Post插件,其推荐效果很出色。在生成相关文章时,Jetpack会把你文章里的所有内容上传到云服务器,反复处理推荐内容,然后在你的网站上显示最终结果。这款插件为每篇文章给出的推荐结果都挺不错。为完成索引上传自己的网站后,我认为推荐结果不到一小时就能看到。
对于Jetpack要采集所有文章内容,以便在服务器上进行处理的事实,一些人对此比较敏感。不过若你的文章已公开发布,这种做法又有什么关系?任何人都能一样轻松地从公开网页上搜刮你的内容;网上还有很多做成此事的工具。这种疑虑在我看来有点误入歧途。
遗憾的是,Jetpack推荐相关文章的默认展示风格,与我新网站的风格冲突极大。由于每篇相关文章都会放在单独的文本框里,我觉得这种布局看起来丑陋,在视觉上也毫无必要更显复杂。我试过用自己的CSS代码调整它的布局风格,结果这种工作挺有难度。后来我意识到可以禁用它的所有CSS代码,直接用我的代码替换,结果表明这样做更轻松容易,而且比试图改写原有代码更加简练。我还把Jetpack默认的相关文章数量从3篇提高到7篇,以便大家拥有更多选择。只有三篇相关文章看着有点吝啬小气。
流量数据
若你喜欢查看数据,用于WordPress的Google Analytics Dashboard(谷歌分析仪表盘),就是非常不错的插件。你必须设置Google Analytics账户才可使用。我用它已有数周时间,这款插件帮我对网站的流量模式有了更好理解。它还提供一个WordPress管理条工具,能让我看到正浏览的自己网站任意页面的流量数据。
自己刚开始写博客时,非常在意流量数据。不过几年过后,我对数据变化便感到无聊乏味,几乎不再查看它们,经常连续6-12个月才查看一次。现在我的新网站上线运行,对于人们和这个网站的互动方式,还有大家花最多时间查看的网站内容,我也有了新的兴趣。
细读自己网站的数据后,我能看出一些有趣的访客模式,比如下面这些:
- 访问我网站读者最多的头10个国家,依次是美国、英国、加拿大、印度、澳大利亚、德国、菲律宾、南非、中国和新加坡。大约44%的流量来自美国。
- 47%的访客是通过桌面或笔记本电脑访问我的网站,45%是通过手机,还有8%是通过平板电脑。
- 通过移动设备访问我网站的人士,超过一半使用的是苹果设备。
- 46%的访客是女性。
- 61%的访客在18-35岁之间。
- 49%的访客使用Chrome浏览器,31%使用Safari浏览器,7%使用Firefox浏览器。
当进入美国的夜间时段,与睡眠相关的文章访问量便会上升。
为我引来最多流量的社交媒体是StumbleUpon,Facebook和Twitter加起来的引荐量在它面前也相形见绌。引荐量第二位的是Reddit。从我写博客开始,StumbleUpon已经为我引来了成百上千万访客。
每天大概有500-600人会访问《如何煮糙米饭》一文,它是我当玩笑写的一篇文章。里面内容简单得难以置信,但显然许多人都链接了这篇文章,并在网上搜索它。通常为我引来流量的头100个搜索关键词里,有好几个都与糙米饭相关。这种好玩结果最终驱使我在2012年写了篇续文,《终极拌饭》。虽然饭做得更好吃了,这篇文章的受欢迎度却不及原来那篇。
性方面的文章超受欢迎,尤其是《主仆游戏玩法》一文,它经常每天出现在访问排名前10位的文章里。很多人都会阅读与性相关的文章,但很少有人提及它们,链接到自己网站,或在社交媒体上分享。所以这事儿只是我们之间的小秘密哦。;)
若你真的喜欢研究数据,或希望提高网站流量,想看自己网站当前流量表现如何,可以选用的数据插件还有很多。
搜索引擎优化
一些人认为实现出色的SEO(搜索引擎优化),就是自身所有流量问题的解决方案。我则对HVO:Human Visitor Optimization(人类访客优化)关注得更多。通过为真实的人们写作,而非为电脑写作,我的网站内容在搜索引擎上的排名结果也不错。而且从开始写博客以来,这就是我一直采用的做法。对于这次网站更新,我也为了人类读者,而在设计方面做了更多工作。
我多年来看见各种SEO技巧来来去去,自己在很大程度上会直接忽视它们。我猜Google最终将淘汰大部分想要钻空子的优化企图。与其把个人时间花在玩弄手段,获取根本配不上的高搜索排名,我觉得专注于帮助人们成长反而更轻松容易。我认为若从这种角度出发去写作,自会获得不错的推荐流量,搜索流量只是另一种形式的推荐而已。
在过去,SEO专家们会说写作长文是个错误。他们说我应该只写300-500字的文章,才会在搜索引擎里获得更高排名。如今他们又告诉大家要写2000来字的文章,因为更长的文章明显有更好排名。Google现在不会再推荐太多人去看较短的文章,因为各种内容作坊会机械快速地创作大量短文,向Google兜售这些垃圾内容。
与其让自己晕头转向地玩弄SEO游戏,长远而言,更为容易、诚实和有效的做法,就是专注把个人精力投入到为真实的人类创造价值,并让你的网站更好地服务他们。若你让自己网站对人们更加有用,并不断学习和提升内容品质,你很可能就会开始吸引各种推荐机会和链接,搜索引擎带来的流量也将自动流入。
可喜的是,现在的SEO技巧已经越来越远离那些计谋手段,更加朝着与Google配合,而非对抗的方向转变。我认为应用诚实合作的SEO技巧才是正途。请避开那些卑劣欺诈的行为;你只是要等以后才会因其受到惩罚。
若要应用任何SEO策略,自己会做的也许就是给文章清晰合理的标题。这意味着在选择标题时不要自显聪明或讨喜。若我写作一篇关于感恩的文章,可能就会给它像《感恩》这样的标题。如果写作关于《如何从个人博客中赚钱》的文章,这个话题便可作为标题。我喜欢让人们只用看看标题,就能轻松知道一篇文章的内容是什么。有时我可能屈从使用一个自己确实喜欢的聪明标题,但大多数时候,我的优先考虑都是清晰和易用。当我见到某人博客,里面文章的标题看起来像The Walking Dead(美剧《行尸走肉》)的剧集名称一样,自己便对其中内容是什么毫无线索。这会让网站的使用效果大打折扣。
只要使用适合人类理解的好标题,那些文章也倾向于在搜索引擎上有良好表现。通过这种方式,我们还可应用其他一些SEO技巧。与其过多考虑SEO,请想想如何让你的内容对人们更加有用和清晰。使用合适的子标题,以及清楚的链接文本,就对人类读者有益,也能帮你在搜索引擎上收获更好排名。
请直接把可能花在理解Google搜索算法上的所有时间,花在理解和服务你的读者上。即使你在开始只有几位读者,也请服务好他们,这些人很可能会给你的网站推荐更多读者… 除非你只是写作关于性方面的内容。;-)
我还会把生活方式放在SEO结果之前考虑。由于自己有意回避了一些Google喜欢的做法,我网站的SEO排名很可能出现下降。例如,我在2014年放弃使用Twitter和Facebook,Google便无法验证我已不存在的社交媒体账户。因为不再有链接到这个网站的社交媒体账户,Google就可能降低我网站内容的排名。由于这个原因,Google也许会看低我网站的合法性。但对我来说,这是个合理交易。我喜欢无需应对社交媒体的生活,自己能通过其他方式获得益处,比如享受更高效的工作产出,以及更少的社交闹剧。不用应对网上的那些胡言乱语真的无比美好。
另一个例子是,我仍在博客文章的网址里包含年月信息,文章发布的日期也列在每篇文章的标题下方。而较旧的信息内容可能会导致文章排名下降。一些人认为更明智的做法,就是不在文章网址或内容里包含发布日期。但我认为自己的做法对人类读者而言是最好选择,因为有些读者可能想知道一篇文章的实际发布日期。我通常喜欢在阅读他人网站上的文章时知道发布日期,所以也把日期直接放在标题下方,让读者能轻松容易地看到。
若我在此有要推荐的插件,它就是Yoast SEO,这款插件目前是用于WordPress网站的最受欢迎SEO插件。我安装了它,但还没有过多使用,基本上在让它自动运行。这款插件有大量值得探索的不同功能。我挺喜欢的一件事,就是可以为每个页面输入自己的元数据描述,这样Goolge会给读者显示那部分短描述内容,而非直接抓取页面上的某段文字。
我喜欢Yoast SEO的另一件事,就是它有内建的网站地图生成器。网站地图就是你网站上所有内容网址的完整列表。通过它,搜索引擎能轻松找到你的网站,并给网站上的所有公开内容建立索引。这样Google便不会错过你网站上的任何页面,即使你还未链接那些页面也没关系。这就是一种诚实合作的SEO技巧。
起初我试用过Jetpack的网站地图插件,但因为某种荒唐原因,Jetpack的网站地图有1000个链接的最高限制。Jetpack,这么做简直愚蠢!许多WordPress网站,包括我的在内,都有不止1000个内容网页。因此,自己网站上生成的Jetpack网站地图总是不完整。我试过搜寻能扩展这个限制的代码,但最终毫无收获。幸运的是,Yoast SEO的网站地图生成器没有这种限制。所以我就使用Yoast插件来生成自己的网站地图。
减少404错误
为确保指向网站的旧链接不会直接消失,我谨慎地将旧URL映射到新URL,并在.htaccess文件中添加重定向。有插件可以帮助完成此事,但我更喜欢直接对.htaccess文件进行编辑,这种做法对自己来说更快捷。
此事相当容易。它只是需要花点时间,因为我必须复查旧网站上的每个URL,并决定它该如何映射到新网站上。我把需要变换的所有URL做成一份列表,再逐个进行处理。其中大部分都是旧HTML文件,现在则要由新网站的WordPress进行管理。
我还清理干净了.htaccess文件,将重定向整洁地分成不同区块,并做好评论注释。这样维护起来也更轻松容易。
我很高兴Yoast SEO插件与Google Search Console(谷歌搜索控制台)结合得很好。我从中看到,人们会因使用错误URL,导致出现大量“404页面无法找到”错误。了解这种信息后,我可以对.htaccess文件做些编辑,添加一些重定向规则,从而让人们能进入自己试图前往的正确URL。
下面就是些错误链接的例子,输入它们将得到404错误页面:
- http://www.stevepavlina.com/articles/do-it-now.htmEvery
- http://www.stevepavlina.com/articles/triple-your-personal-productivity.htm;
- http://www.stevepavlina.com/articles/courage-to-live-consciously.htmWhat
- http://www.stevepavlina.com/about-steve-pavlina.htm/
当某人在邮件里分享链接,在URL后没有添加空格便开始写出另一句话时,就可能出现上面的错误结果。
由于这些链接并不准确,用户通常会看到404错误页面。这种结果很遗憾,因为我明显能看出正确链接应该是什么。幸运的是,通过对.htaccess文件做些简单调整,我就能为大家提供正确网址,不再给出404错误页面。
这些链接都指向旧网站上的HTML页面,它们现在已被转换成拥有不同URL地址的WordPress文章和页面。我对Do It Now(《现在就干》)文章最初所做的重定向如下所示:
RewriteRule ^articles/do-it-now\.htm$ /blog/2005/11/do-it-now/ [R=301,L]
遗憾的是,此链接对应的那些错误版本无法匹配这个重定向模式,所以会导致404错误。我需要做的所有事情,就是把重定向改换成下面这样:
RewriteRule ^articles/do-it-now\.htm /blog/2005/11/do-it-now/ [R=301,L]
其中唯一更改的地方,就是移除$符号。$符号告诉重定向命令,此处便是URL地址的终点。通过移除这个符号,我让旧URL的地址模式在末端保持开放状态。这意味着在.htm之后还可以出现额外字符,但整体依然匹配旧URL的地址模式。
如果你猜想^字符表示URL的起始位置(位于域名和斜杠之后),你猜的没错。
若你好奇为何这项规则里的句号前有个反斜杠,那是因为在正常程序表达里,句号代表任意单个字符。通过在句号前添加反斜杠,我特指它就是一个句号,而非任意字符。当然,因为任意字符也可以匹配为句号,两种理解方式都可行。
修改重定向规则,使其更富弹性,这种做法意味着会有更少人看到404错误页面。受益于这种宽容重定向规则的大多数人,甚至不会注意到他们在一开始使用了错误的URL。
通过使用Yoast SEO插件的Search Console功能(或直接使用Google Search Console),我可以看到人们在哪里出现404错误。假如自己能想出修改重定向规则的好方法,从而帮人们进入其意向页面,那当然是更好结果。
再次强调,这是“人类访客优化”技巧。人类总会时不时犯错。如果我们能让网络服务器的行为方式少点死板,大家就可以绕过那些差错。
缓存
由于WordPress大量使用PHP和MySQL程序,若不使用缓存插件(或像WP Engine那样能提供内建缓存的主机),这个网站的运行速度便会有点缓慢。我的网站目前运行在一个有着8块CPU的专用服务器上,假如禁用缓存插件,我就总能看到服务器出现尖峰负荷。这意味着服务器正进行大量处理操作,来提供页面访问服务。如果访问量过大,这个问题便会明显拖慢网站运行速度。
针对每次页面访问,与必须运行PHP代码并从数据库载入内容不同,缓存插件能在某页面被首次查看时保存它的一个副本。并让未来访客去查看这个副本页面。与每次访问时都重新生成页面相比,提供页面副本能使访问速度明显加快。
请想想你打出一页文字,并把它打印出来,要花多长时间。那么再复印出另一页要花多长时间?复印出额外副本要比打出原始文本快得多。WordPress的默认操作,是为每次页面访问重新生成原始页面内容。缓存插件则会教它保存页面副本,并为访客提供副本浏览,除非页面原始内容发生改变。
我一直使用的缓存插件是WP Super Cache。它稳定耐用,速度超快。我唯一不喜欢它的地方,就是丑陋的界面设计。这款插件提供大量选项,但甚至在读过说明文档后,我还是很难明白其中一些选项的用处。我认为对于WordPress新手而言,那种界面看起来可能有点令人生畏。不过若你只用默认选项,应该也没问题。
另一款流行的缓存插件是W3 Total Cache。我很久前试用过它,但发现WP Super Cache速度更快。我见过一份详细的速度比较报告,说明在多项关键指标上,WP Super Cache确实要胜过W3 Total Cache。
若你的网站流量不大,很可能并不需要缓存插件。但当网站因为高流量而开始访问缓慢时,缓存插件肯定能带来不同效果。
安全
自己网站被恶意入侵,最起码会令人烦扰不已。这种事在我身上发生过几次,不仅是这个网站,还包括我一直运营到2006年的游戏发行网站。有次一个攻击者利用我的网站,试图向访问网站上旧论坛的人士,分发Windows系统的恶意软件。直到一位安全研究员善意告知此事后,我才知道自己网站被黑。
对于新网站,我决定在安全方面付出更多努力。因为提前防止恶意入侵,一般要比入侵后再进行恢复,轻松容易得多(也省心得多)。
我目前使用并愿意推荐的一款综合安全插件,是WordFence。由于bots程序一直在持续攻击我的网站,我把WordFence配置得要比其默认设置更加强悍。假如WordFence探测到鬼鬼祟祟的行为,它便会自动拦截这类访客。
WordFence甚至能实时向我展示发生的攻击。这些攻击大量源自中国和俄国,但也有许多来自美国国内。
WordFence每天自动扫描我网站上的文件,确保没有内容被恶意修改。它会把我现在正使用的WordPress文件版本,与原始WordPress文件进行比对,若有任何地方不匹配,它就会警示我。它还对我使用的所有插件进行同样的操作,并假定这些插件都来自WordPress插件目录。若你使用的网站主题来自WordPress主题目录,这款插件也会对其进行相同操作。WordFence还会像病毒扫描软件那样,进行额外扫描,检查恶意软件、病毒感染,以及漏洞缺陷。只要发现任何问题,它便会发送邮件告知你问题所在。
WordFence还有些挺棒的自定义选项,它们能探测并拦截恶意入侵。我在这方面的设置,要比默认设置严格得多,因为尽早拦截各种攻击,能让网站运行得更快一点。我何必让恶意bots程序浏览更多网站页面?
我从不在自己的WordPress网站上使用默认登录名称,也不使用容易猜到的登录名,比如自己名字的各种变体。除此之外,我还用既强又长的密码。所以若有任何访客进入我的WordPress登录页面,试图采用像admin、test、stevepavlina、steve、pavlina、stevep,或spavlina之类的名称登录,那类行为将被立即拦截,因为我不存在使用这些名称的账户。任何用这些名称登录的企图,就是恶意入侵的迹象。
另外,由于网站没有启用评论,没人会需要进入wp-comments-post.php文件。然而bots程序总会侵袭我网站上的这个文件,试图发布评论垃圾信息。所以我对WordFence插件也做了相关设置,立即拦截任何试图访问这个文件的程序。只是载入此文件的操作,便会马上触发拦截。
在捕捉和拦截各种攻击方式上,WordFence还有其他许多功能。例如,若发现一位访客浏览大量404错误页面,想必这位访客正在探测网站的漏洞缺陷。WordFence能自动探测和拦截这类访客。
通过查看WordFence记录的404错误,我可以看出恶意访客的行为企图。许多恶意访客都会探测含有内建文件下载脚本的插件,他们试图用此插件下载我的wp-config.php文件,从而偷得我的数据库登录名称和密码。我不确定这样做对他们有多大帮助,因为这些人仍需进入服务器才能使用那些信息。可能有些人会在WordPress数据库上,使用自己WordPress管理员或FTP账户的相同名称和密码。对于这些不同账户,我全都使用不同的登录名称和密码,所以破解其中一个,并不会导致其他账户的破解。
我不太喜欢WordFence的一件事情,就是它有时会为小问题而发来吓人邮件。有些邮件的标题会像这样:[WordFence警告]www.stevepavlina.com网站发现问题。
我第一次收到这种邮件,是在安装WordFence几天后。自己当时就想,哦不!我被黑客攻击了?邮件内容的起始部分看起来也有点吓人,它会告诉我发现了网站上的一个“危急问题”。但那个所谓的危急问题,只是有款插件出现可用更新。WordFence能时刻留心,以确保我的插件保持更新,这样做挺好,但我认为这类邮件的用语可以再少制造一些不祥预感。
那种用语就像女友闯进我办公室并喊道:“Steve!我们遇到一个大问题!我刚刚觉得饿了!”
几天后我又收到一封WordFence邮件,警示我服务器上的几个文件像是恶意程序。检查之后,我发现它是次误报。WordFence把我的一些缓存文件错误标记成恶意程序,但其标记的恶意代码完全合法,属于网站上的另一个插件。
恶意入侵经常源于使用了不安全或过期的插件,所以在更新插件和使用信誉良好的优质插件方面,我一直非常严格。自己网站上次被恶意入侵,就是因为一款编码糟糕的插件。我早前已发现它的一些漏洞并报告给开发者,那款插件的编码给我的印象也是有点马虎。我本该早点替换这款插件,但自己不幸要依赖它实现某项重要功能。这便是我在未来想要避免的那类错误。
假如一款插件上的问题晚点才被发现,而它的代码仍留在你的网站上,即使没有启用这款插件,也能导致你的网站出现安全漏洞。这也是我更愿避开那些看起来有潜在问题,没有经常更新的插件的另一个原因。
我很感激WordFence会持续监控、扫描和拦截各种攻击。只要它能防止一件恼人的恶意入侵,就已经很棒。若入侵确实发生,它也极可能尽早探测到这种问题。
社交按钮
写作这篇文章时,我的网站上没有任何社交媒体分享按钮。不过自己对是否添加社交按钮持观望态度。
一方面,这些分享按钮会给每个页面增添杂乱感受。我觉得没有它们能给网站创造更多禅境氛围。
另一方面,这些按钮可以让人们更易和朋友分享文章,而且它们也确实被大量使用。
甚至有些人发邮件问我是否可以添加社交按钮,以便分享我的文章。显然有人还没意识到他们可以复制粘贴链接,并在自己喜欢的任何社交媒体上进行分享。因此我很好奇将分享按钮重新添加回网站是不是更好选择。
我曾在每篇文章上都提供社交分享按钮,但在2014年放弃使用社交媒体时移除了它们。不过若大家喜欢,我可以轻松恢复这些按钮。Jetpack有一款社交分享插件,但默认的输出按钮样式太丑陋,我想把它调整得在网站上看起来更自然。
如果你对此事有自己的观点,我也很想听听你的反馈建议。
数据库改进
因为某种古怪原因,WordPress的数据库表单在最初发布时,原始采用了名为latin1_swedish_ci的字符集。后来WordPress转换字符集时,因此给许多博客作者带来一些技术问题。我碰到的问题是,有些外文字符无法在自己网站上恰当显示,比如像pâté或jalepeño这样的词汇。我可以采用临时性的修补措施,但这次我决定彻底纠正此问题,把整个数据库转换到utf8_unicode_ci字符集。
根据WordPress解释的做法,这种类型的转换是个复杂进程。WordPress在转换进程开始时给出了如下警示:
“注意:若你不知道任何关于SQL和MySQL/MariaDB的知识,很可能会搞砸此事。这属于voodoo编码的领域…”
幸运的是,我的voodoo编码技能足以应对这项任务,所以搞定了转换进程。
我还对数据库做了其他改进,包括把用于所有表单的数据库引擎,从MyISAM转换到更现代的InnoDB,移除了由旧插件添加,但在插件卸载后没有清理干净的所有表单,并处理了其他几个问题。
为清理一些数据库问题,我使用了Better Search Replace插件。它对处理WordPress图片库里的错误URL尤其有用。这喜欢这款插件的序列化搜索与替换功能,这些功能对处理存储在wp_postmeta和wp_options表单里的特定数据十分重要。
当我必须诊断一些在错误日志中看到的SQL错误时,Query Monitor插件便派上用场。它能向我展示哪些SQL请求正运行在每个页面上,以及运行它们花了多长时间。
大多数博客作者无需应对这类问题。这些问题之所以积累起来,很大程度上是因为我一直使用WordPress这么多年,经历过几十轮更新升级。这类数据库维护工作,有点类似修复一辆旧汽车。除了车龄大点,这辆车跑起来依然没问题,但完成某些修理和升级后,它会跑得更棒。
数据库工作并非我的强项,自己必须重新学习一些旧技能,尤其是SQL知识。我决定慢慢处理此事,并在进行途中频繁做好备份。我意外让数据库崩溃过几次,但从备份恢复只需几秒钟,所以崩溃问题并没什么大不了。我很高兴花时间完成了这项额外工作,因为数据库现在要比我刚开始处理它时的状态好得多。它运行得更快,未来的维护工作也应当更轻松容易。
除了我之外,没人会看到这个网站的数据库,但清理它让我对自己的工作有了更深的骄傲感。我是部分受到史蒂夫·乔布斯的启示,对于人们看不到的那些产品部位,他也渴望打磨完美。让自己保持近乎不合理的高标准肯定要花费更多时间,但对于这种工作哲学带来的好处,我也获得了更好理解。在某种程度上,若我对自己作品的所有方面都感到骄傲,而非只是人们会看到的那些部分,这样做似乎更轻松容易。全方位保持一致是更简单的做法,因为那时你可以把同一种思维心态应用在一切事物上,而非需要为项目的不同部分,载入不同的思维心态。这种做法还能打造耐心。虽然培养耐心很难,但它是能带来巨大好处的性格品质。
更多改进之处
因为有些人喜欢打印网站文章,我于是编写了一些额外的CSS代码,使文章在打印时不会包含导航元素,从而让格式看起来更漂亮。我还通过编码让图片不会在打印时超出页面边界,导致拼接不完整的问题。我调整了FAQ(常见问题解答)页面的样式,从而在打印时能自动拓展FAQ内容,以免FAQ内容在打印页面之间产生拼接问题。通过“打印预览”功能,在不浪费纸张的情况下我便可测试更改效果,所以这项工作挺容易。我还在工作过程中学到一些新的CSS技巧。
通过使用Better Random Redirect(更佳随机指向)插件,我在网站上添加了随机文章功能。因为只用完成一件简单事情,实现这项功能的代码其实相当简单,所以插件也无需经常更新。挺棒的是,这款插件与缓存也能很好结合使用;不然大家每次都将看到相同的文章。
由于WordPress内建的搜索功能众所周知地糟糕,特别是因为它会把搜索结果按发布日期,而非按相关性排序,我于是用名为Relevanssi的插件升级了搜索功能。这款插件提供的搜索结果拥有好得多的相关性。Relevanssi还会向我展示人们正在搜索哪些关键词(全是匿名信息,不会标明具体用户)。
目前人们在网站内建搜索中使用的头15个关键词是:
- 睡眠
- 目的
- 信念
- 两相睡眠
- 工作
- 主观现实
- 多相睡眠
- 收入
- 性
- 恐惧
- 纯素
- 吸引力法则
- 自律
- 大学
- 金钱
我在所有这些话题上都有相关文章,这意味着人们应该能基于自己的搜索目的,找到有用信息。
我还会看到哪些搜索操作最终失败,其中大部分都是因为打字错误,比如:lonliness(孤独)、synchonicties(同步性)、polifasic sleep(多相睡眠)、caffine(咖啡因)、archieving(实现)、disipline(自律),和aprisioners(囚犯)。我从中明白,自己也许能让网站在搜索上变得更有弹性,从而更好适配打字错误。
在下篇文章中谈论网站速度优化的内容时,我将分享更多插件知识。