seo分析师的头衔,就是寻找大量免费数据来源,并将其整理成有见地的东西。 为什么? 因为将客户的建议基于猜想没有任何价值。 最好将高质量的数据与良好的分析相结合,以帮助我们的客户更好地了解对他们而言重要的方面。
在本文中,我将告诉您如何开始使用一些免费资源,并说明如何组合独特的分析方法,这些方法可以为您的博客文章提供有用的见解(如果您是作家,则是代理机构,如果您是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>
哪里:
谷歌曾说过谷歌自定义搜索引擎与谷歌.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>
结果:
将返回类似以下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构建块和源是:
要知道的一个因素是 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 tables theQuery <- " 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 name theConn <- dbConnect(dbDriver("MySQL"), user = "USER_NAME", password = "PASSWORD", dbname = "MY_DB") # [2] Query the database and hold the results theResults <- dbGetQuery(theConn, theQuery) # [3] Disconnect from the database dbDisconnect(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)的分析师和数据可视化研究人员)