在本文中,我将见告您如何开始利用一些免费资源,并解释如何组合独特的剖析方法,这些方法可以为您的博客文章供应有用的见地(如果您是作家,则是代理机构,如果您是SEO,或者您的网站(如果您是自己进行SEO的客户或所有者)。
我要利用的方案是我要剖析一些SEO属性(例如,反向链接,页面权限等),并查看它们对Google排名的影响。 我想回答以下问题:“反向链接真的对进入SERP的第1页有效吗?”和“我真的须要在前10个结果中得到哪种页面威信评分?”为此,我须要结合起来来自许多Google搜索的数据,个中包含我要衡量的具有SEO属性的每个结果的数据。
让我们开始并研究如何组合以下任务以实现此目标,这些任务都可以免费设置:

利用Google自定义搜索引擎查询
我们首先须要查询Google并存储一些结果。 为了保持Google做事条款的精确性,我们不会直接抓取Google.com,而是会利用Google的“自定义搜索”功能。 Google的自定义搜索紧张旨在让网站所有者在其网站上供应类似Google的搜索小部件。 但是,还有一个免费的基于REST的Google搜索API ,可让您查询Google并以盛行的JSON格式检索结果。 有配额限定,但是可以配置和扩展配额限定 ,以供应可利用的良好数据样本。
在精确配置为搜索全体网络后,您可以将查询发送到自定义搜索引擎(在我们的示例中是利用PHP),并将其视为Google相应,只管有一些把稳事变。 利用自定义搜索引擎的紧张限定是:(i)它不该用某些Google Web搜索功能(例如个性化结果),并且; (ii)如果您包含十个以上的网站,则可能包含Google索引的一部分结果。
只管有这些限定,但仍有许多搜索选项可以通报给自定义搜索引擎,以代理您可能期望Google.com返回的内容。 在我们的场景中,我们在拨打电话时通报了以下内容:
https://www.google.com/customsearch/v1?key=<google_api_id>&userIp= <ip_address>&cx <custom_search_engine_id>&q = iPhone + X&cr = countryUS&start = 1 </ custom_search_engine_id> </ ip_address> </ google_api_id>
哪里:
https://www.google.com/cn/customsearch/v1 –是Google自定义搜索API的网址key = <GOOGLE_API_ID> –您的Google Developer API密钥userIp = <IP_ADDRESS> –打算机的IP地址cx = <CUSTOM_SEARCH_ENGINE_ID> –您的Google自定义搜索引擎 IDq = iPhone + X – Google查询字符串(“ +”代替“”)cr = countryUS –国家/地区限定(来自Goolge的“ 国家/地区名称”列表)start = 1 –返回的第一个结果的索引-例如SERP页面1。连续调用将使其递增以得到页面2–5。谷歌曾说过谷歌自定义搜索引擎与谷歌.com有所不同 ,但是在有限的产品测试中,我比较了两者之间的结果,这让我感到鼓舞,因此连续进行剖析。 也便是说,请记住,以下数据和结果来自Google自定义搜索(利用“全体网络”查询),而不是Google.com。
利用免费的某 API帐户
运用程序编程接口 (API)。 要利用它,您须要注册一个 API密钥 ,该密钥是免费的,但有限定,每十秒钟一次查询 。 具有免费的帐户和API密钥,然后您可以查询Links API并剖析以下指标 :
在调用Links API之前,将xxx API代码添加在一起,如下所示:
www.apple.com%2F?Cols = 103616137253&AccessID = xxx_ACCESS_ID&过期= 1560586149&Signature = <xxx_SECRET_KEY>
结果:
http://lsapi.xxxx.com/linkscape/url-metrics/“ class =” redactor-autoparser-object“> http://lsapi.sxxxx.com/linksc ... – API的URLhttp%3A%2F%2F www.apple.com.tw%2F –我们要获取数据的编码URLCols = 103616137253 –上表中的Moz API代码总和AccessID = xxx_ACCESS_ID – 访问ID的编码版本(可在您的API帐户中找到)Expires = 1560586149 –查询超时-设置为未来几分钟Signature= <xxx_SECRET_KEY> – 访问ID的编码版本(在您的API帐户中找到)将返回类似以下JSON的内容:
数组 ( [ut] =>apple [uu] => <a href="http://www.apple.com/" class="redactor-autoparser-object"> www.apple.com/ </a> [ueid] => 13078035 [uid] => 14632963 [uu] => www.apple.com/ [ueid] => 13078035 [uid] => 14632963 [umrp] => 9 [umrr] => 0.8999999762 [fmrp] => 2.602215052 [fmrr] => 0.2602215111 [us] => 200 [upa] => 90 [pda] => 100 )
有关利用PHPPerl,Python,Ruby和Javascript查询数据的一个很好的出发点,请参阅Github上的此存储库 。 我选择利用PHP。
利用PHP和MySQL网络数据
现在我们有了Google自定义搜索引擎和某 API,险些可以捕获数据了。 Google和某工具通过JSON格式相应要求,因此许多盛行的编程措辞都可以查询。 除了我选择的措辞PHP外,我还将Google和xxx的结果都写到了数据库中,并为此选择了MySQL Community Edition 。 也可以利用其他数据库,例如Postgres,Oracle,Microsoft SQL Server等。这样做可以利用SQL(构造化查询措辞)以及其他措辞(例如R)进行数据的持久性和即席剖析。后来)。 创建用于保存Google搜索结果的数据库表(带有用于排名,URL等的字段)和用于保存xxx数据字段(ueid,upa,uda等)的表之后,我们就可以设计数据网络操持了。
Google利用自定义搜索引擎供应了足够的配额 (每天利用相同的Google开拓者掌握台密钥进行多达1亿次查询),但是某些工具免费API的有上限,如果须要高等的就要购买了。根据操持和方案的不同,当我只是在探索免费选项时,我设计了代码,以在2页的SERP(每页10个结果)中网络125个Google查询,使我能够保持在2500行的配额之内。 至于哪些搜索可以触发Google,有很多资源可供给用。 我选择利用Mondovo,由于它们供应了许多类别的列表,每个列表最多500个单词,对付实验来说足够了。
我还引入了一些PHP帮助程序类以及我自己的数据库I / O和HTTP代码。
总之,利用的紧张PHP构建块和源是:
Google自定义搜索引擎– Ash Kiswany利用Jacob Fogg的 PHP界面编写了Google自定义搜索的出色文章;Mozscape API –如前所述,该用于在Github上访问Moz的PHP实现是一个很好的出发点。网站征采器和HTTP –在Purple Toolz ,我们有自己的征采器PurpleCerzBot ,它利用Curl作为HTTP和此大略HTML DOM解析器 ;数据库I / O – PHP对MySQL具有出色的支持,我将这些教程打包为类。要知道的一个成分是 API调用之间的10秒间隔 。 这是为了防止免费API用户过载。
利用SQL和R剖析数据
现在该看看我们所拥有的。 有时这称为数据争用 。 我利用一种称为R的免费统计编程措辞以及一种称为R Studio的开拓环境(编辑器)。
R由于它是开源的,并且它具有许多第三方库,这使其非常通用并且适宜此类事情。
现在,我有几个数据库表,个中包含我在SERPS的2页上的125个搜索词查询的结果(即,每个搜索词有20个排名的URL)。 两个数据库表保存Google结果,另一个表保存Moz数据结果。 要访问这些数据库,我们须要做一个数据库INNER JOIN,我们可以通过将RMySQL软件包与R一起利用来轻松完成数据库。这是通过在R的掌握台中键入“ install.packages('RMySQL')”来完成的,个中包括“库(RMySQL)”位于我们R脚本顶部。
然后,我们可以实行以下操作来连接并将数据获取到名为“ theResults”的R数据帧变量中。
library(RMySQL)# INNER JOIN the two tablestheQuery <- " SELECT A., B., C. FROM ( SELECT cseq_search_id FROM cse_query ) A -- Custom Search Query INNER JOIN ( SELECT cser_cseq_id, cser_rank, cser_url FROM cse_results ) B -- Custom Search Results ON A.cseq_search_id = B.cser_cseq_id INNER JOIN ( SELECT FROM moz ) C -- Moz Data Fields ON B.cser_url = C.moz_url ;"# [1] Connect to the database# Replace USER_NAME with your database username# Replace PASSWORD with your database password# Replace MY_DB with your database nametheConn <- dbConnect(dbDriver("MySQL"), user = "USER_NAME", password = "PASSWORD", dbname = "MY_DB")# [2] Query the database and hold the resultstheResults <- dbGetQuery(theConn, theQuery)# [3] Disconnect from the databasedbDisconnect(theConn)
NOTE:把稳:我有两个表来保存Google自定义搜索引擎数据。 一种保存Google查询中的数据(cse_query),另一种保存结果(cse_results)。
现在我们可以利用R的全部统计功能开始争吵。
让我们从一些总结开始,以便对数据有所理解。 我经历的过程在每个字段中基本上都是相同的,因此让我们解释并利用Moz的“ UEID”字段(指向URL的外部所有者链接的数量)。 通过在RI中键入以下内容,可以得到以下内容:
> summary(theResults$moz_ueid) Min. 1st Qu. Median Mean 3rd Qu. Max. 0 1 20 14709 182 2755274 > quantile(theResults$moz_ueid, probs = c(1, 5, 10, 25, 50, 75, 80, 90, 95, 99, 100)/100) 1% 5% 10% 25% 50% 75% 80% 90% 95% 99% 100% 0.0 0.0 0.0 1.0 20.0 182.0 337.2 1715.2 7873.4 412283.4 2755274.0
不雅观察这一点,您会创造数据由于中位数与均值的关系而偏斜(很大),而中位数与均值之间的关系被较高四分位数范围内的值(超过不雅观测值的75%的值)拉动。 但是,我们可以将其绘制成R中的箱形图,个中每个X值都是从Google自定义搜索位置1-20开始按等级排列的UEID分布。
请把稳,我们在y轴上利用了对数刻度,以便我们可以显示变革范围很大的所有值!
由Google排名得出的 UEID R中的箱须图(注:对数刻度)
箱形图和晶须图很棒,由于它们在个中显示了大量信息(请拜会R中的geom_boxplot函数)。 紫色方框区域表示四分位间距(IQR),它是不雅观测值的25%到75%之间的值。 每个“方框”中的水平线代表中间值(订购时中间的那一条),而从方框延伸的线(称为“晶须”)代表1.5x IQR。 晶须外的点称为“非常值”,并显示每个等级的不雅观察值集的范围。 只管有对数刻度,但我们可以看到中值从排名10上升到排名1明显,表明股权链接的数量可能是Google的排名成分。 让我们用密度图进一步探索它。
密度图非常类似于分布(直方图),但显示的是平滑线而不是条形图。 与直方图非常相似,密度图的峰值显示了数据值集中的位置,可以在比较两个分布时供应帮助。 不才面的密度图中,我将数据分为两类:(i)排名1-10的SERP第1页上显示的结果为粉赤色;以及 (ii)在SERP第2页上显示的结果为蓝色。 我还绘制了两种分布的中位数,以帮助解释Page 1和Page 2之间的结果差异。
从这两个密度图得出的结论是,第1页SERP结果比第2页结果具有更多的外部股权反向链接(UEID)。 您还可以不才面看到这两个类别的中值,清楚地显示了第1页(38)的值远大于第2页(11)的值。 因此,我们现在有一些数字可用于反向链接的SEO策略。
# Create a factor in R according to which SERP page a result (cser_rank) is on> theResults$rankBin <- paste("Page", ceiling(theResults$cser_rank / 10))> theResults$rankBin <- factor(theResults$rankBin)# Now report the medians by SERP page by calling ‘tapply’> tapply(theResults$moz_ueid, theResults$rankBin, median) Page 1 Page 2 38 11
由此,我们可以推断出股权反向链接(UEID)很主要,如果我根据此数据为客户供应建议,我想说他们该当寻求38个以上基于股权的反向链接,以帮助他们进入SERP的第1页。 当然,这是一个有限的样本,须要更多的研究,须要考虑更大的样本和其他排名成分,但是您可以理解。
现在,让我们研究另一个比UEID范围更小的度量标准,并查看的UPA度量标准,即页面在搜索引擎结果中排名良好的可能性。
> summary(theResults$moz_upa) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 33.00 41.00 41.22 50.00 81.00 > quantile(theResults$moz_upa, probs = c(1, 5, 10, 25, 50, 75, 80, 90, 95, 99, 100)/100) 1% 5% 10% 25% 50% 75% 80% 90% 95% 99% 100% 12 20 25 33 41 50 53 58 62 75 81
UPA是供应给URL的数字,范围为0-100。 数据的表现比之前的UEID无界变量的均值和中位数靠得很近,表现出更好的“正态”分布,正如我们通过在R中绘制直方图所见的那样。
莫兹的UPA得分的直方图
我们将像以前一样实行第1页:第2页的分裂和密度图,并在将UPA数据分为两组时查看UPA分数分布。
# Report the medians by SERP page by calling ‘tapply’> tapply(theResults$moz_upa, theResults$rankBin, median) Page 1 Page 2 43 39
总之,来自两个 API变量的两个分布非常不同。 但是两者都显示出SERP页面之间分数的差异,并且为您供应了切实的代价(中位数),可以与您互助并终极为客户供应关于您自己的SEO或申请SEO的建议。
当然,这只是一个小样本,不应从字面上理解。 但是,借助Google和xxx的免费资源,您现在可以看到如何开始开拓自己的剖析功能,以使假设基于而不是接管规范。 SEO排名成分一贯在变革,拥有自己的剖析工具来进行自己的测试和实验将帮助您提高信誉,乃至可能对迄今未知的事物供应独特的见地。
(文:Jason Morphett | 英国电信(BT)的剖析师和数据可视化研究职员)