本站SEO的思路

众所周知我是靠建站吃饭的,SEO并非我的主业,甚至连支线业务都算不上。因为从我手上建成的网站,我都会在代码层做到尽可能的优化,并且通过Yoast SEO插件最大程度的发挥WordPress在SEO方面的技术优势。做到了这些,接下来只要好好写内容就好了。

本博客建立五年,虽然访问量不大,但也算络绎不绝,一直有陌生访客约我建站,从中也认识了不少优质客户,并展开长期合作。这当中,有一部分的功劳属于WordPress得天独厚的SEO基因。当然,这里要自吹一番,WP再强大,用得不好的仍然是大部分人,做出的网站能否发挥SEO功效,还是要取决于使用者。因为相信WP和自己作品的质量,我认为从自己手上做出来的网站,够好了,已没有太大的SEO空间,所以一直不主动接SEO业务。

只有少数预算充足的客户希望从我这里能再榨取一些潜力,会付费让我在我开发的网站上做更多的SEO工作。当然这些工作并不包括常规的优化工作,什么sitemap、TDK、网站提速之类的基础工作在建站的时候肯定都已经做了,不好意思另外再收人家钱。

我后续的收费SEO工作其实大部分是苦逼的劳力付出,比如拼命挖掘客户的微信公众号、博客以及其他我能找得到的资料,在网站上另辟区域重组这些内容,从而增加页面数量、增加长尾词的可能性、增加站内相关页面的互链。定期再去从访客统计记录里找到新冒出来的词,哪怕可能只有两三个访问量,我都会在内容中多加提点。所以SEO的这部分工作,等于把我变成了半个编辑。技术上如果要再多挖一些,或许只有黑帽了吧,不过这些我是不碰的。 查看详细 »

解决Retina屏幕的MAC上Photoshop显示比例过小的问题

最近发现老婆大人出的网页设计稿虽然设计风格仍然是一流的,但字体和按钮都做得偏大,在我开发页面的时候造成了一定的困扰。看了一下她的MAC屏幕才知道原来每次用Photoshop CC 2015做设计都要把图片放大了做,再缩小了看全局,导致习惯性地会把文字做大一些以免用户看不清,显然这个显示方式导致了一些尺寸上的感知偏差,而且这样反复放大缩小也很浪费精力…

我们希望的PS显示界面是这样的:
Retina屏幕的MAC上Photoshop显示比例过小的问题
查看详细 »

非root用户状态下安装LNMP准备工作

在非root用户登录的情况下,安装LNMP会提示“You must be root to run this script, please use root to install lnmp”。这时候并不一定是当前用户的权限不够,而是lnmp的设定需要由用户名root的用户来安装。

如果操作系统是ubuntu,输入命令行

sudo su

如果当前用户有root权限,提示符就会跳为root@hostname,可以直接安装了。如果没有root权限,则要求输入正确密码。

如果操作系统是centos、fedora,输入命令行

su

其他步骤差不多。

记录一下备忘。

检查LNMP上MySQL宕机并自动重启服务的脚本和使用方式

近期发现服务器上MySQL又经常宕机了,平均每周一次,应该和最近新挂上去的几个WordPress网站有关,毕竟一台配置不算豪华的主机上挂了10个WP网站,压力太大难免会内存不够造成宕机。每次宕机都需要自己重启MySQL也比较麻烦,如果是客户自己发现的,感觉更不好,所以网上找了个无人值守的脚本先用起来。 查看详细 »

解决阿里云用LNMP在某些时候FTP无法使用的问题

今天在咖啡厅办公,发现一台在家里和公司都能正常使用的阿里云主机无法用FTP列目录了,当然上传文件也是不能了,其症状是可以正常登录,但到了列目录的时候就卡住:
解决阿里云用LNMP在某些时候FTP无法使用的问题

碰到这种服务器问题还是只能采用搜索大法,先去LNMP论坛兜了一圈,大致可以确认的是防火墙问题,建议开放端口20000-30000,然后换成被动模式登录。
开放端口命令:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000:30000 -j ACCEPT

照做后发现能列出根目录,但要进入任何子目录后FTP又卡住了,感觉是不是还有另外一道无形的墙把我阻隔了?突然灵光一现,记得阿里云后台有个安全组和iptables有着差不多的作用,那边还没有开放这个端口段,可以一试 查看详细 »

正则表达式学习笔记

做项目的时候,正则表达式其实用得很少,而且大部分用得到的正则表达式都可以通过搜索引擎找到。因此这么多年来虽然已经多次研读正则表达式的文档,但偶尔要自己写的时候还是会脑子卡壳,求助谷歌…
好吧,再好好的理解一下,做个笔记,争取减少求助搜索引擎的次数。本文并非系统整理正则表达式的概念,而是加强巩固自己淡忘的一些概念和知识点。

正则表达式通过构造函数使用方法

var str = "He is a boy. She is not a boy."
var reg = new RegExp("\\bis\\b");
str.replace(reg, "IS");
//"He IS a boy. She is not a boy."
var reg = new RegExp("\\bis\\b" , 'g');
str.replace(reg, "IS");
//"He IS a boy. She IS not a boy."
 
//另一种写法:正则表达式前后用/包含,g参数加在最后
str.replace(/\bis\b/g, "IS");

查看详细 »

微信小程序中使用地图和定位的一些坑和经验

首先,经过测试,使用GCJ02(火星坐标)比WGS84(GPS)的坐标在计算距离的时候更为精确。在微信小程序中使用内置接口获取用户坐标,代码放在app.js里:

App({
  getLocation: function () {
    var that = this
    wx.getLocation({
      //type: 'wgs84',
      type: 'gcj02',
      success: function (res) {
        that.globalData.latitude = res.latitude
        that.globalData.longitude = res.longitude
        //var speed = res.speed
        //var accuracy = res.accuracy
      }
    })
  }
 
})

查看详细 »

一次解决LNMP主机反复宕机问题的记录

新购的一台阿里云主机,几乎每天都会发生MySQL自动停止服务。主机其他部分看来运行都正常,怀疑是哪里设置的不对,但我装完这台LNMP改的默认设置不多,之前也并没有碰到过类似的问题。既然是MySQL停止服务,那么就从MySQL这里找问题,搜索了一个多小时,发现MySQL宕机有很多可能性,一时无法确定。但解决此类问题的关键都是查看错误日志开始。

命令行进入本地MySQL,之后输入密码

mysql -hlocalhost -uroot -p

之后进入提示符mysql>

查看错误日志的位置

mysql> show variables like '%log_error%';

此时获取到了文件位置。查看日志后,发现大部分重复片段是这样的:

2017-07-26 04:34:03 7617 [Note] Plugin 'FEDERATED' is disabled.
2017-07-26 04:34:03 7617 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-07-26 04:34:03 7617 [Note] InnoDB: The InnoDB memory heap is disabled
2017-07-26 04:34:03 7617 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-07-26 04:34:03 7617 [Note] InnoDB: Memory barrier is not used
2017-07-26 04:34:03 7617 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-07-26 04:34:03 7617 [Note] InnoDB: Using CPU crc32 instructions
2017-07-26 04:34:03 7617 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
2017-07-26 04:34:03 7617 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2017-07-26 04:34:03 7617 [ERROR] Plugin 'InnoDB' init function returned error.
2017-07-26 04:34:03 7617 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-07-26 04:34:03 7617 [ERROR] Unknown/unsupported storage engine: InnoDB
2017-07-26 04:34:03 7617 [ERROR] Aborting

查看详细 »

WooCommerce的虚拟物品订单付款后自动处理订单状态

这应该是一个比较常见的功能需求了,虚拟物品由于不需要进行送货,用户付款后即可算作订单完成,以便网站统计订单后进行更多操作,用户也可能籍此获得一些其他的优惠或者权益。这一切都需要前一个订单在没有人工干预的状态下自动完成。

首先,官方文档中给出了直接完成订单的代码:

1
2
3
4
5
6
7
8
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order( $order_id ) {
     if ( ! $order_id ) {
         return;
     }
     $order = wc_get_order( $order_id );
     $order->update_status( 'completed' );
}

查看详细 »

七牛CDN防盗链开启后,微信小程序无法加载其资源问题解决

最近在学习开发微信小程序的时候碰到了形形色色的问题,待我有空多整理一些笔记,这次先记录一个简单的。我习惯用七牛CDN作为自己开发的网站静态资源存储分发,并且为每个资源库设置防盗链白名单。在开发小程序之初,我就已经把这两个域名加入到了白名单中:
*.qq.com
*.wechat.com
因此就想当然的以为这样设置,微信小程序读取CND资源就不会有问题。当然,我在开发过程中为了避免碰到这样那样的问题,是先关闭了防盗链的。小程序完成后提交审核,同时我顺手打开了防盗链,刷一下小程序,结果发现所有云上的图片都打不开,开发工具报403错误:
微信小程序无法加载七牛CDN资源问题
查看详细 »