作为一名SEO专业人士,我的日常任务也在不断学习。在去年年底开始学习Python之后,我发现自己越来越多地将我所学的东西付诸实践。
这包括相当简单的任务,例如比较字数或状态码随时间的变化,以及分析包括内部链接和日志文件分析在内的工作。
此外,Python还非常有用:
- 用于处理大型数据集
- 对于通常会使Excel崩溃并需要复杂分析以提取任何有意义的见解的文件。
Python如何帮助技术SEO
Python以多种方式授权SEO专业人员自动化能力通常需要大量的时间来完成重复性的任务。
这意味着我们有更多的时间(和精力)用于重要的战略工作和无法自动化的优化工作。
它还使我们能够更有效地处理大量数据,以便做出更多数据驱动的决策,从而为我们的工作和客户的工作提供有价值的回报。
事实上,有数据公司研究发现,数据驱动型组织获得客户的可能性是其他组织的23倍,而留住这些客户的可能性是6倍。
它对备份你的任何想法或策略也很有帮助,因为你可以用你拥有的数据来量化这些想法或策略,并在此基础上做出决策,同时在努力实现事情时也有更大的杠杆作用。
将Python添加到SEO工作流
将Python添加到工作流中的最佳方法是:
- 想一想什么是可以自动化的,尤其是在执行乏味的任务时。
- 确定您正在执行或已完成的分析工作中的任何差距。
我发现开始学习的另一个有用的方法是使用你已经访问过的数据,并且提取有价值的见解使用Python
这就是我如何学会了我将在本文中分享的大部分东西。
学习Python并不是成为一个好的SEO专家的必要条件,但是如果你有兴趣了解更多关于Python如何帮助你做好准备的话。
开始需要什么
为了从本文中获得最佳效果,您需要以下几点:
- 来自网站的一些数据(例如,对网站的爬网、统计分析或搜索控制台数据)。
- 一个运行代码的IDE(集成开发环境),对于入门我推荐Google Colab或Jupyter Notebook .
- 开放的心态。这也许是最重要的一点,不要害怕打破某些东西或犯错误,找到问题的原因和解决问题的方法是我们作为SEO专业人士所做的工作的一个重要部分,因此将同样的心态应用于学习Python有助于减轻任何压力。
1、善用网络现有的资源
一个很好的开始是尝试Python中可用的许多库中的一些。
有很多要探索的库,但我发现对SEO相关任务最有用的三个任务是Pandas,Requests和Beautiful Soup。
Pandas
Pandas是一个用于处理表数据的Python库,它允许在关键数据结构是数据帧的情况下进行高级数据操作。
数据帧本质上是Pandas的Excel电子表格但是,它不仅限于Excel的行和字节限制,而且比Excel快得多,因此效率更高。
开始使用Pandas的最佳方法是获取一个简单的CSV数据,例如,对您的网站进行爬网,并将其保存在Python中作为一个DataFrame。
一旦你有了这个存储,你就可以执行许多不同的分析任务,包括聚合、透视和清理数据。
- import pandas as pd
- df = pd.read_csv("/file_name/and_path")
- df.head
requests
下一个库名为requests,用于在Python中发出HTTP请求。
它使用不同的请求方法(如GET和POST)发出请求,结果存储在Python中。
其中一个例子是一个简单的URL GET请求,它将打印出一个页面的状态代码,然后可以使用它来创建一个简单的决策函数。
- import requests
- #Print HTTP response from page
- response = requests.get('https://www.xxxxxxxx.com')
- print(response)
- #Create decision making function
- if response.status_code == 200:
- print('Success!')
- elif response.status_code == 404:
- print('Not Found.')
您还可以使用不同的请求,例如headers,它显示关于页面的有用信息,例如内容类型和缓存响应所需时间的时间限制。
- #Print page header response
- headers = response.headers
- print(headers)
- #Extract item from header response
- response.headers['Content-Type']
此外,还可以模拟特定的用户代理,例如Googlebot,以便提取该特定bot在抓取页面时看到的响应。
- headers = {'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}
- ua_response = requests.get('https://www.xxxx.com/', headers=headers)
- print(ua_response)
Beautiful Soup
最后一个库名为Beautiful Soup,用于从HTML和XML文件 .
它最常用于web抓取,因为它可以将HTML文档转换为不同的Python对象。
例如,您可以获取一个URL,并使用beautifulsoup和Requests库一起提取页面的标题。
- #Beautiful Soup
- from bs4 import BeautifulSoup
- import requests
- #Request URL to extract elements from
- url= 'https://www.xxxxxxxxx.com/knowledge/technical-seo-library/'
- req = requests.get(url)
- soup = BeautifulSoup(req.text, "html.parser")
- #Print title from webpage
- title = soup.title
- print(title)
此外,Beautiful Soup允许您从页面中提取其他元素,例如页面上找到的所有a href链接。
- for link in soup.find_all('a'):
- print(link.get('href'))
2、分段分割页面
第一个任务涉及到对网站的页面进行细分,这实际上是根据页面的URL结构或页面标题将页面按类别分组。
首先,使用简单的正则表达式根据URL将网站分成不同的段:
- segment_definitions = [
- [(r'\/blog\/'), 'Blog'],
- [(r'\/technical-seo-library\/'), 'Technical SEO Library'],
- [(r'\/hangout-library\/'), 'Hangout Library'],
- [(r'\/guides\/'), 'Guides'],
- ]
接下来,我们添加一个小函数,它将遍历URL列表并为每个URL分配一个类别,然后将这些段添加到包含原始URL列表的DataFrame中的新列中。
- use_segment_definitions = True
- def segment(url):
- if use_segment_definitions == True:
- for segment_definition in segment_definitions:
- if re.findall(segment_definition[0], url):
- return segment_definition[1]
- return 'Other'
- df['segment'] = df['url'].apply(lambda x: get_segment(x))
还有一种方法可以使用URL结构在不必手动创建片段的情况下对页面进行分段。这将获取包含在主域后面的文件夹,以便对每个URL进行分类。
同样,这将向我们的DataFrame添加一个新列,其中包含生成的段。
- def get_segment(url):
- slug = re.search(r'https?:\/\/.*?\//?([^\/]*)\/', url)
- if slug:
- return slug.group(1)
- else:
- return 'None'
- # Add a segment column, and make into a category
- df['segment'] = df['url'].apply(lambda x: get_segment(x))
三、重定向相关性
如果我不了解使用Python可能实现的任务,那么我将从未考虑过要完成此任务。
在迁移之后,当重定向到位时,我们希望通过查看每个页面的类别和深度是否已更改或保持不变来确定重定向映射是否准确。
这涉及到在迁移前和迁移后对站点进行爬网,并根据其URL结构对每个页面进行分段,如上所述。
在这之后,我使用了一些简单的比较运算符(它们内置于Python中)来确定每个URL的类别和深度是否发生了更改。
- df['category_match'] = df['old_category'] == (df['redirected_category'])
- df['segment_match'] = df['old_segment'] == (df['redirected_segment'])
- df['depth_match'] = df['old_count'] == (df['redirected_count'])
- df['depth_difference'] = df['old_count'] - (df['redirected_count'])
由于这本质上是一个自动化的脚本,它将在每个URL中运行以确定类别或深度是否已更改,并将结果作为新的数据帧输出。
新的DataFrame将包含额外的列,如果它们匹配,则显示True;如果不匹配,则显示False。
就像在Excel中一样,Pandas库使您能够基于原始数据帧的索引来透视数据。
例如,获取迁移后有多少URL具有匹配的类别。
此分析将使您能够查看已设置的重定向规则,并确定是否存在迁移前后差异较大的类别,这些类别可能需要进一步调查。
4、内部链接分析
分析内部链接对于确定站点的哪些部分链接最多,以及发现改进站点内部链接的机会非常重要。
为了执行此分析,我们只需要从web爬网中获取一些数据列,例如,显示页面之间链接的任何度量。
再次,我们想分割这些数据,以便确定网站的不同类别并分析它们之间的链接。
- internal_linking_pivot['followed_links_in_count'] = (internal_linking_pivot['followed_links_in_count']).apply('{:.1f}'.format)
- internal_linking_pivot['links_in_count'] = (internal_linking_pivot2['links_in_count']).apply('{:.1f}'.format)
- internal_linking_pivot['links_out_count'] = (internal_linking_pivot['links_out_count']).apply('{:.1f}'.format)
- internal_linking_pivot
透视表对于这种分析非常有用,因为我们可以透视类别,以便计算每个类别的内部链接总数。
Python还允许我们执行数学函数,以便获得我们所拥有的任何数字数据的计数、求和或平均值。
5、日志文件分析
另一个重要的分析与日志文件,以及我们可以在许多不同工具中收集到的这些数据。
您可以提取一些有用的见解,包括确定Googlebot对站点的哪些区域进行爬网最多,以及监视请求数随时间的变化。
此外,它们还可以用来查看有多少不可索引或损坏的页面仍在接收bot点击,以解决爬网预算的任何潜在问题。
对于每一个类别,最容易使用的就是根据数据段对URL进行统计,或者对每个数据段进行统计。
如果你能够访问历史日志文件数据,也有可能监测谷歌访问你的网站的变化。
Python中也有很好的可视化库,如Matplotlib和Seaborn,它们允许您创建条形图或折线图,将原始数据绘制成易于跟踪的图表,显示随时间变化的比较或趋势。
6、数据合并
使用Pandas库,还可以基于共享列(例如URL)组合数据帧。
一些有用的SEO合并示例包括将来自web爬网的数据与googleanalytics中收集的转换数据相结合。
这将使用每个URL进行匹配,并在一个表中显示来自两个源的数据。
以这种方式合并数据有助于为性能最好的页面提供更多的见解,同时还可以识别性能不如预期的页面。
合并类型
在Python中有两种不同的合并数据的方法,默认的方法是内部合并,合并将发生在左数据帧和右数据帧中的值上。
但是,您也可以执行外部合并,它将返回左侧数据帧中的所有行,以及右侧数据帧中的所有行,并尽可能匹配它们。
以及右合并或左合并将合并所有匹配的行,并保留不匹配的行(如果分别存在于右合并或左合并中)。
7、谷歌趋势
还有一个很棒的图书馆,叫做PyTrends公司,这实际上允许您使用Python按比例收集Google趋势数据。
有几种API方法可用于提取不同类型的数据。
一个例子是一次跟踪最多5个关键字的搜索兴趣。
另一个有用的方法是返回某个主题的相关查询,这将显示一个介于0-100之间的Google Trends分数,以及一个百分比,显示随着时间的推移,关键字的兴趣增加了多少。
这些数据可以很容易地添加到googlesheet文档中,以便在googledatastudio仪表板中显示。
总之
这些项目帮助我节省了大量手动分析工作的时间,同时也让我能够从我所接触到的所有数据中发现更多的见解。
我希望这能给你一些SEO项目的灵感,你可以开始学习Python。