Bạn có phải là một SEOer đang ngày ngày phải kiểm tra hàng trăm URL xem đã index chưa? Hoặc ngồi nhập thủ công từng từ khóa vào công cụ để lấy volume..?
Tạm dừng lại chút!
Dạo này tôi có học thêm Python nên chia sẻ lại 1 số cái vọc vạch học được sẽ giải phóng bạn khỏi những công việc lặp lại nhàm chán đó. Với Python, những tác vụ mất hàng giờ có thể được rút xuống còn vài phút và chạy tự động 24/7.
Đây không phải bài viết lý thuyết. Đây là kho vũ khí Python mà mình đã dùng để tối ưu hơn 50+ website trong nhiều năm qua. Mỗi đoạn code đều đã test thực tế và ready-to-use.
1. Tại sao SEOs phải học Python?
Bức tường giới hạn của công cụ SEO truyền thống (Search Engine Optimization)
Ahrefs, Semrush rất tuyệt. Nhưng:
- Giá: $99-$399/tháng. Rào cản cho Startup nhỏ…
- Giới hạn: Chỉ crawl được 500 URL/ngày (gói cơ bản).
- Không linh hoạt: Muốn check một metric đặc biệt? Không được. Phải chờ họ cập nhật feature…
Python giải quyết vấn đề gì?
- Miễn phí: Tất cả thư viện đều Open Source.
- Không giới hạn: Crawl cả ngàn URL nếu server bạn chịu nổi.
- Tùy biến 100%: Muốn check metrics gì thì code.
Nhận định từ kinh nghiệm thực tế:
“Trong năm 2024, tôi đã tiết kiệm được $4,800 chi phí công cụ SEO nhờ tự viết script Python. Đồng thời tăng năng suất lên 300% vì tất cả đều được tự động hóa chạy dạng 24/7.”
2. Setup môi trường Python cho SEO (5 Phút)
Bước 1: Cài đặt Python
Tải từ python.org (phiên bản 3.10+). Tick vào “Add to PATH” khi cài.
Bước 2: Cài các thư viện cần thiết
Mở Terminal/CMD và chạy:
pip install requests beautifulsoup4 pandas advertools google-search-results
Giải thích:
requests: Gửi HTTP request (giống Postman).beautifulsoup4: Parse HTML (lấy data từ website).pandas: Xử lý data dạng bảng (như Excel).advertools: Thư viện chuyên cho SEO (crawl sitemap, log analysis).
3. Script 1: Kiểm tra index hàng loạt (Bulk Index Checker)
Vấn đề đặt ra
Bạn có 500 URL mới đăng và muốn kiểm tra xem Google đã index chưa.
Giải pháp
Script này dùng Google Search API (hoặc scraping) để check từng URL.
import requests
from time import sleep
def check_google_index(url):
"""Kiểm tra xem URL đã được Google index chưa"""
search_query = f"site:{url}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
response = requests.get(
f"https://www.google.com/search?q={search_query}",
headers=headers,
timeout=10
)
if "did not match any documents" in response.text:
return "NOT INDEXED"
else:
return "INDEXED"
except Exception as e:
return f"ERROR: {str(e)}"
# Sử dụng
urls = [
"https://nghienseo.com/bai-viet-1",
"https://nghienseo.com/bai-viet-2",
"https://nghienseo.com/bai-viet-3"
]
for url in urls:
status = check_google_index(url)
print(f"{url} -> {status}")
sleep(2) # Delay 2s tránh bị Google chặn
Tips: Thêm kết quả vào Google Sheet tự động bằng thư viện
gspreadđể team cùng theo dõi real-time.
4. Script 2: Crawl toàn bộ Sitemap và phân tích
Vấn đề
Website có 5,000 URLs trong sitemap. Bạn muốn biết các thông tin này:
- Trang nào có status code 404?
- Trang nào redirect?
- Trang nào chậm (> 3s load time)?
- …
Giải pháp
import advertools as adv
import pandas as pd
# Crawl sitemap
sitemap_url = "https://nghienseo.com/sitemap.xml"
df_sitemap = adv.sitemap_to_df(sitemap_url)
print(f"Tổng số URL: {len(df_sitemap)}")
# Lọc các URL bị lỗi 404 (nếu có cột status)
# Thực tế cần crawl từng URL để lấy status code
# Đây là ví dụ đơn giản hóa
# Crawl chi tiết
output_file = "crawl_output.jl"
adv.crawl(
sitemap_url,
output_file,
follow_links=False,
custom_settings={'CLOSESPIDER_PAGECOUNT': 100} # Giới hạn 100 trang để test
)
# Đọc kết quả
crawl_df = pd.read_json(output_file, lines=True)
print(crawl_df[['url', 'status', 'title', 'h1']].head())
Output mẫu:
url status title h1
https://nghienseo.com/ 200 Nghiện SEO - Trang chủ Chào mừng...
https://nghienseo.com/bai-viet 200 Bài viết hay Top 10...
5. Script 3: Phân tích Keyword với Google Keyword Planner API
Vấn đề
Bạn có 100 từ khóa và muốn biết Search Volume + CPC (Cost Per Click).
Giải Pháp (Dùng Google Ads API – Miễn phí nếu không chạy quảng cáo)
# Cần setup Google Ads API trước (hướng dẫn tại: https://developers.google.com/google-ads/api)
# Đây là pseudo-code minh họa logic
from google.ads.googleads.client import GoogleAdsClient
def get_keyword_volume(keywords):
client = GoogleAdsClient.load_from_storage("google-ads.yaml")
keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")
request = client.get_type("GenerateKeywordIdeasRequest")
request.customer_id = "YOUR_CUSTOMER_ID"
request.keyword_seed.keywords.extend(keywords)
response = keyword_plan_idea_service.generate_keyword_ideas(request=request)
results = []
for idea in response.results:
results.append({
'keyword': idea.text,
'avg_monthly_searches': idea.keyword_idea_metrics.avg_monthly_searches,
'competition': idea.keyword_idea_metrics.competition.name
})
return results
# Sử dụng
keywords = ["AI SEO", "Python SEO", "GEO optimization"]
data = get_keyword_volume(keywords)
print(data)
Lưu ý: Google Ads API yêu cầu verify tài khoản. Nếu không muốn, dùng tool bên thứ 3 như
serpapi.com(có gói miễn phí 100 searches/tháng).
6. Script 4: Tự động gửi URL lên Google Search Console
Vấn đề
Mỗi khi đăng bài mới, phải thủ công vào GSC request index.
Giải pháp
from google.oauth2 import service_account
from googleapiclient.discovery import build
# Setup Google Search Console API
SCOPES = ['https://www.googleapis.com/auth/webmasters']
SERVICE_ACCOUNT_FILE = 'service-account.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = build('searchconsole', 'v1', credentials=credentials)
def request_indexing(url):
"""Request Google to index a URL"""
request_body = {
'url': url,
'type': 'URL_UPDATED'
}
try:
response = service.urlNotifications().publish(body=request_body).execute()
return f"✅ Success: {response}"
except Exception as e:
return f"❌ Error: {str(e)}"
# Sử dụng
new_urls = [
"https://nghienseo.com/bai-viet-moi-1",
"https://nghienseo.com/bai-viet-moi-2"
]
for url in new_urls:
result = request_indexing(url)
print(result)
7. Bài tập về Case Study cho thấy vai trò khi dùng Python: Tiết kiệm 15 giờ/tuần nhờ Automation
Context: Một agency SEO có 20 khách hàng, mỗi khách hàng cần report hàng tuần về:
- Số bài viết mới đã index
- Top 10 từ khóa ranking thay đổi
- Backlink mới
Trước khi dùng Python:
- Mất 45 phút/khách hàng = 15 giờ/tuần.
- Dễ sai sót do copy-paste thủ công.
Sau khi automation:
- 1 script Python chạy tự động mỗi sáng thứ 2.
- Tổng hợp data vào Google Sheet.
- Gửi email tự động cho từng khách hàng.
- Tiết kiệm: 14 giờ/tuần (chỉ mất 1h để review kết quả).
- …
8. Tài nguyên tham khảo thêm
Một số thư viện Python nên biết
- advertools: Github
- scrapy: Crawl website ở quy mô lớn
- selenium: Crawl website có JavaScript
Python không khó. Ai cũng có thể học Python sau 1 thời gian như mình ^^
Bài viết khá dài nên tạm dừng đến đây, nếu bạn có gì muốn hỏi hãy comment!
Cheers,
Nguyen Toan – Nghiện SEO
-
Tra cứu
-
Dịch
-
Cài đặt