BSP防范Trackback垃圾的一种方法

Trackback是个好东西,不过由于缺少对发送方的确认机制,一直备受垃圾的困扰。比如,CSDN和Donews都深受其害。甚至很多人整天都在讨论Trackback是该死还是不该死

这样的讨论徒劳无益,技术方面,虽然已经有若干人作过尝试(1234),不过大部分都未必简单可行。本文试图介绍一个简单可行的方法,并讲述如何在CSDN Blog系统中清除这些垃圾。

解决思路

Trackback垃圾产生的重要原因是大量站长在流量利益的驱使下的“变态”行为,其中也包括大量国外的劣质SEO。我们只有从对这些行为分析的基础上来解决Trackback垃圾问题。

我们知道,Trackback垃圾发送者有2个目的:一是希望用户通过连接访问他们的网站(比如一些美女站),二是希望搜索引擎加强他们网站的排名和收录。因此,他们通常都有Trackback回溯地址。我们通过这些地址的分析可以找出一些有价值的规律。然后基于这个规律上去清理Trackback垃圾。

收集Trackback信息

CSDN Blog的Trackback保存在一个名叫blog_feedback的数据表中,我们先尝试对Trackback回溯地址(数据库字段DisplayUrl)进行提取主域名的分析。做法可以直接在这个表上新建一个DisplayUrlRoot字段进行保存。

update blog_feedback set DisplayUrlRoot=dbo.getUrlRoot(DisplayUrl) where feedbacktype=2

其中getUrlRoot是一个用户自定义函数,获取回溯地址的主域名

CREATE FUNCTION [dbo].[getUrlRoot]
(@sURL nvarchar(256))
RETURNS nvarchar(256)
AS
BEGIN
declare @m_f int
declare @m_len int
declare @ret nvarchar(256)
set @ret=''

select @m_f = PATINDEX('%//%', @sURL)
if (@m_f = 6) -- Is HTTP URL Format
begin
select @m_len = LEN(@sURL)
select @m_f = PATINDEX('%/%', SUBSTRING(@sURL, 8, @m_len-7))
if (@m_f != 0)
begin
select @ret = SUBSTRING(@sURL, 8, @m_f-1)
end
else --没有发现'/'
begin
select @ret = SUBSTRING(@sURL, 8, @m_len-7)
end
select @m_f = PATINDEX('%.%', @ret)
select @ret = SUBSTRING(@ret, @m_f+1, LEN(@ret)-@m_f)
end
return @ret
END

这样我们对每个Trackback就获取了一个回溯地址的主域名,下面的分析基于这个新字段进行统计分析。所以之前应该为这个字段加上一个索引。

统计Trackback信息

在SQL查询分析器中执行下面语句

select DisplayUrlRoot, count(ID) from blog_feedback where DisplayUrlRoot is not null
group by DisplayUrlRoot having(count(ID))>50 order by count(ID) desc

我们可以看到所有Trackback回溯地址的主域名有50个以上的域名列表,在CSDN Blog的排名前5个是

域名:alice.it 条目数:39337
域名:blogspot.com 条目数:14447
域名:editme.com 条目数:8439
域名:aol.com 条目数:7043
域名:psl.lt 条目数:6907

经过检查,这里全是Trackback垃圾。

Trackback清理方法

在CSDN Blog,条目数大于50的Trackback回溯地址的主域名有367个,大量国外不知名的域名我们不需要检查,只需要重点筛选一些知名和相关网站即可。我们发现,对于CSDN Blog的Trackback而言,只有来自以下3个域名的Trackback是全部“干净的”:csdn.net、cnblogs.com、donews.net,另外,msn.com有一半左右是“干净的”。

现在我们开始清理了,执行下面这条语句:

delete blog_feedback where DisplayUrlRoot in
(select DisplayUrlRoot from blog_feedback where DisplayUrlRoot is not null and
DisplayUrlRoot not in ('csdn.net', 'donews.net', 'cnblogs.com', 'msn.com')
group by DisplayUrlRoot having(count(ID))>50)

执行后,近24万多条Trackback垃圾马上消失。仅留下了16394条有用的信息。

那些知名网站Trackback垃圾多?

以下纯粹是CSDN Blog统计分析的结果,仅说明某些人借助一些知名网站进行垃圾传播:

域名:blogspot.com 条目数:14447
域名:aol.com 条目数:7043
域名:blog.hexun.com 条目数:6621
域名:blog.ccidnet.com 条目数:4980
域名:netscape.com 条目数:1378
域名:baidu.com 条目数:804
域名:a8.com 条目数:704
域名:blog.sohu.com 条目数:344
域名:china.alibaba.com 条目数:243

结语

本文基于对Trackback回溯地址主域名的统计分析的基础上给出了一种大批量消除Trackback垃圾的方法,并在CSDN Blog消除效果良好。值得大型BSP借鉴。

Update:
前面提到,msn.com有一半左右是“干净的”,如何清理呢?我也发现,99.9%的正常从msn.com过来的Trackback没有标题,而垃圾Trackback是全部有标题,这是一个有用的线索。执行:

delete blog_feedback where DisplayUrlRoot = 'msn.com' and title<>'' and ID not in (有限的几个有用的ID)

可以清理这些垃圾。执行完后,CSDN Blog正常Trackback下降到15411个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值