{ Автоматизация SEO-анализа с Python: Разработка микросервиса для проверки Rich Results }

О проекте
Введение
В современном цифровом мире поисковая оптимизация (SEO) играет ключевую роль в видимости веб-ресурсов. Одним из важных аспектов SEO является реализация структурированных данных, которые позволяют поисковым системам лучше понимать содержание сайта и отображать обогащенные результаты (Rich Results) в поисковой выдаче. Для разработчиков и SEO-специалистов критически важно иметь возможность быстро проверять и анализировать структурированные данные на веб-страницах.
В этой статье я расскажу о разработанном мной микросервисе на Python, который автоматизирует процесс проверки Rich Results с помощью официального инструмента Google и существенно ускоряет процесс SEO-аудита.
Проблема и решение
Проблема
Ручная проверка структурированных данных через инструмент Google Rich Results Test занимает значительное время, особенно при необходимости анализа множества страниц. Каждая проверка требует:
- Перехода на страницу инструмента
- Ввода URL тестируемой страницы
- Ожидания завершения проверки
- Ручного копирования результатов для дальнейшего анализа
Для SEO-специалистов, работающих с крупными сайтами, этот процесс становится трудоемким и занимает часы рабочего времени.
Решение
Я разработал микросервис на Python, который:
- Автоматизирует взаимодействие с Google Rich Results Test
- Запускается по API-запросу
- Выполняет проверку указанного URL
- Автоматически извлекает результаты анализа
- Возвращает данные в структурированном формате
Сервис построен на современном стеке технологий:
- FastAPI — высокопроизводительный фреймворк для создания API
- Selenium — инструмент для автоматизации браузера
- Pydantic — библиотека для валидации данных
- Pyperclip — инструмент для работы с буфером обмена
Техническая реализация
Архитектура микросервиса
Микросервис реализован как REST API на базе FastAPI, что обеспечивает высокую производительность и автоматическую документацию API. Основная функциональность выполняется через управление браузером Chrome с помощью Selenium.
python
from fastapi import FastAPI, Query
from pydantic import BaseModel
from typing import Optional
from selenium import webdriver
# Другие импорты...
app = FastAPI()
# Модель для ответа
class ClipboardResponse(BaseModel):
data: str
@app.get("/process")
async def process(url: Optional[str] = Query("onliner.by", description="URL для проверки")) -> ClipboardResponse:
# Логика обработки...
return ClipboardResponse(data=clipboard_data)
Автоматизация браузера с Selenium
Одним из ключевых компонентов решения является настройка и управление веб-браузером через Selenium. Я реализовал функцию настройки браузера с оптимальными параметрами для стабильной работы:
python
def setup_driver():
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
chrome_options = Options()
# chrome_options.add_argument("--headless") # Опция для запуска в фоновом режиме
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument(f"user-agent={user_agent}")
driver_path = "chromedriver.exe"
service = Service(driver_path)
return webdriver.Chrome(service=service, options=chrome_options)
Алгоритм проверки Rich Results
Процесс проверки структурированных данных выполняется следующим образом:
- Запуск браузера с предустановленными параметрами
- Переход на страницу инструмента Google Rich Results Test
- Автоматический ввод проверяемого URL
- Ожидание завершения проверки (с установленными таймаутами)
- Взаимодействие с элементами страницы для получения результатов
- Копирование данных в буфер обмена и их извлечение
- Сохранение результатов в файл для дальнейшего анализа
- Возврат полученных данных через API-ответ
python
@app.get("/process")
async def process(url: Optional[str] = Query("onliner.by", description="URL для вставки в поле ввода")) -> ClipboardResponse:
driver = setup_driver()
clipboard_data = ""
try:
test_url = "https://search.google.com/test/rich-results"
driver.get(test_url)
# Поиск поля для ввода URL и ввод значения
input_field = driver.find_element(By.XPATH, '//input[@aria-label="Введите URL"]')
input_field.send_keys(url)
time.sleep(7)
input_field.send_keys(Keys.RETURN)
# Ожидание и обработка результатов...
# ...
clipboard_data = pyperclip.paste()
# Сохранение в файл
with open("copied_data.txt", "w", encoding="utf-8") as txt_file:
txt_file.write(clipboard_data)
except Exception as e:
return ClipboardResponse(data=f"Ошибка: {e}")
finally:
driver.quit()
return ClipboardResponse(data=clipboard_data)
Преимущества решения
Для SEO-специалистов
- Экономия времени: процесс, занимавший минуты на каждую страницу, сокращается до секунд
- Масштабируемость: возможность проверки большого количества URL через API
- Интеграция: легкая интеграция с другими инструментами и системами через API
Для разработчиков
- Быстрое тестирование: мгновенная проверка внедренных структурированных данных
- Автоматизация CI/CD: возможность включения проверки Rich Results в процесс непрерывной интеграции
- Расширяемость: простота добавления новой функциональности благодаря модульной архитектуре
Технические преимущества
- Производительность: FastAPI обеспечивает высокую скорость обработки запросов
- Современный API: полная типизация и автоматическая документация API (Swagger UI)
- Надежность: обработка исключений и корректное освобождение ресурсов
Оптимизация и улучшения
В процессе разработки я внедрил несколько оптимизаций для повышения надежности и производительности сервиса:
- Управление временем ожидания: использование явных пауз вместо "слепого" ожидания для обеспечения стабильности работы на различных соединениях:
python
# Стратегическое использование пауз для стабильной работы
time.sleep(7)
input_field.send_keys(Keys.RETURN)
time.sleep(30) # Достаточное время для полной загрузки результатов
- Сохранение результатов: автоматическое сохранение данных в файл для резервного копирования и дальнейшего анализа
python
# Сохранение данных для последующего анализа
with open("copied_data.txt", "w", encoding="utf-8") as txt_file:
txt_file.write(clipboard_data)
- Надежное освобождение ресурсов: использование блока
finally
для гарантированного закрытия браузера даже при возникновении ошибок
python
finally:
driver.quit() # Гарантированное освобождение ресурсов браузера
Варианты расширения функциональности
Текущая версия микросервиса может быть расширена следующими способами:
- Пакетная обработка: добавление эндпоинта для проверки нескольких URL за один запрос
- Расширенная аналитика: парсинг и структурирование результатов для более удобного анализа
- Мониторинг: регулярная проверка ключевых страниц и отправка уведомлений при обнаружении проблем
- Интерфейс пользователя: разработка веб-интерфейса для работы с сервисом без программирования
- Расширенная обработка ошибок: добавление дополнительной логики для обработки различных сценариев и ошибок браузера
Заключение
Разработанный микросервис демонстрирует, как современные технологии Python могут эффективно решать практические задачи в области SEO. Автоматизация проверки Rich Results не только экономит время, но и повышает качество анализа структурированных данных.
Данный проект является примером моего подхода к разработке: решение реальной проблемы с использованием оптимальных технологий, внимание к деталям и фокус на практической пользе.
Код проекта доступен в моем GitHub-репозитории. Я продолжаю работать над улучшением микросервиса и открыт для предложений по его дальнейшему развитию.
Ключевые слова: Python, FastAPI, Selenium, SEO, автоматизация, Rich Results, микросервисы, API, веб-разработка, структурированные данные, Google Rich Results Test