Редиректы являются неотъемлемой частью поддержки любого сайта, и управление редиректами становится настоящим вызовом, когда SEO-специалисты имеют дело с сайтами, содержащими миллионы страниц.
Примеры ситуаций, где может потребоваться массовая реализация редиректов:
- Интернет-магазин имеет большое количество товаров, которые больше не продаются
- Устаревшие страницы новостных изданий больше не актуальны или не имеют исторической ценности
- Каталоги с устаревшими листингами
- Доски объявлений с истекшими вакансиями
Почему массовые редиректы необходимы?
Это помогает улучшить пользовательский опыт, консолидировать рейтинги и экономить краулинговый бюджет.
Вы можете рассмотреть использование noindex, но это не останавливает Googlebot от сканирования. Это тратит краулинговый бюджет по мере роста количества страниц.
С точки зрения пользовательского опыта попадание на устаревшую ссылку расстраивает. Например, если пользователь попадает на устаревшую вакансию, лучше перенаправить его на ближайшее соответствие активной вакансии.
В Search Engine Journal мы получаем много 404 ссылок от AI-чатботов из-за галлюцинаций, поскольку они изобретают URL, которые никогда не существовали.
Мы используем отчеты Google Analytics 4 и Google Search Console (а иногда и логи сервера) для извлечения этих 404 страниц и перенаправления их на наиболее подходящий контент на основе слага статьи.
Когда чатботы ссылаются на нас через 404 страницы, и люди продолжают переходить по сломанным ссылкам, это не обеспечивает хорошего пользовательского опыта.
Подготовка кандидатов для редиректов
Прежде всего, прочитайте пост о том, как создать векторную базу данных Pinecone. (Обратите внимание, что в данном случае мы использовали "primary_category" как ключ метаданных вместо "category".)
Чтобы это работало, мы предполагаем, что все векторы ваших статей уже хранятся в базе данных "article-index-vertex".
Подготовьте ваши URL для редиректов в формате CSV, как в этом примере файла. Это могут быть существующие статьи, которые вы решили удалить, или 404 из ваших отчетов Search Console или GA4.
Опциональная информация "primary_category" - это метаданные, которые существуют с записями ваших статей в Pinecone при их создании и могут использоваться для фильтрации статей из той же категории, что еще больше повышает точность.
В случае отсутствия заголовка, например, в 404 URL, скрипт извлечет слова слага из URL и использует их в качестве входных данных.
Генерация редиректов с помощью Google Vertex AI
Загрузите ваши учетные данные Google API сервиса и переименуйте их в "config.json", загрузите скрипт ниже и пример файла в тот же каталог в Jupyter Lab и запустите его.
import os import time import logging from urllib.parse import urlparse import re import pandas as pd from pandas.errors import EmptyDataError from typing import Optional, List, Dict, Any from google.auth import load_credentials_from_file from google.cloud import aiplatform from google.api_core.exceptions import GoogleAPIError from pinecone import Pinecone, PineconeException from vertexai.language_models import TextEmbeddingModel, TextEmbeddingInput # Импорт tenacity для механизма повторных попыток from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type from IPython.display import clear_output # ─── ПОЛЬЗОВАТЕЛЬСКАЯ КОНФИГУРАЦИЯ ───────────────────────────────────────────── INPUT_CSV = "redirect_candidates.csv" # Путь к входному CSV файлу с URL для редиректа OUTPUT_CSV = "redirect_map.csv" # Путь к выходному CSV файлу с картой редиректов PINECONE_API_KEY = "YOUR_PINECONE_KEY" # Ваш API ключ для Pinecone PINECONE_INDEX_NAME = "article-index-vertex" # Название индекса Pinecone GOOGLE_CRED_PATH = "config.json" # Путь к файлу учетных данных Google Cloud EMBEDDING_MODEL_ID = "text-embedding-005" # ID модели эмбеддингов Vertex AI TASK_TYPE = "RETRIEVAL_QUERY" # Тип задачи для модели эмбеддингов CANDIDATE_FETCH_COUNT = 3 # Количество кандидатов для получения из Pinecone TEST_MODE = True # Если True, обрабатывается только небольшая выборка MAX_TEST_ROWS = 5 # Максимальное количество строк в тестовом режиме QUERY_DELAY = 0.2 # Задержка между API запросами PUBLISH_YEAR_FILTER: List[int] = [] # Фильтр по годам публикации LOG_BATCH_SIZE = 5 # Размер пакета для записи результатов MIN_SLUG_LENGTH = 3 # Минимальная длина сегмента URL слага MAX_RETRIES = 5 # Максимальное количество повторных попыток INITIAL_RETRY_DELAY = 1 # Начальная задержка перед повтором
Вы увидите тестовый запуск с только пятью записями, и появится новый файл "redirect_map.csv", который содержит предложения редиректов.
Когда убедитесь, что код работает корректно, вы можете установить TEST_MODE в False и запустить скрипт для всех ваших URL.
Если код останавливается и вы возобновляете работу, он продолжает с того места, где остановился. Он также проверяет каждый найденный редирект против CSV файла.
Эта проверка предотвращает выбор URL из базы данных в списке удаляемых. Выбор такого URL может привести к бесконечному циклу редиректов.
Для наших примеров URL результат показан ниже.
Теперь мы можем взять эту карту редиректов и импортировать ее в наш менеджер редиректов в системе управления контентом (CMS), и все готово!
Вы можете видеть, как система смогла сопоставить устаревшую новостную статью 2013 года "YouTube Retiring Video Responses on September 12" с более новой, очень релевантной статьей 2022 года "YouTube Adopts Feature From TikTok – Reply To Comments With A Video."
Также для "/what-is-eat/" система нашла соответствие с "/google-eat/what-is-it/", что является 100% идеальным совпадением.
Это не только благодаря мощности качества Google Vertex LLM, но также результат выбора правильных параметров.
Когда я использую "RETRIEVAL_DOCUMENT" как тип задачи при генерации векторов эмбеддингов запроса для новостной статьи YouTube, показанной выше, она совпадает с "YouTube Expands Community Posts to More Creators", что все еще релевантно, но не такое хорошее совпадение как другое.
Для "/what-is-eat/" она совпадает со статьей "/reimagining-eeat-to-drive-higher-sales-and-search-visibility/545790/", что не так хорошо как "/google-eat/what-is-it/".
Если вы хотите найти совпадения редиректов из вашего пула свежих статей, вы можете запросить Pinecone с одним дополнительным фильтром метаданных "publish_year", если у вас есть это поле метаданных в ваших записях Pinecone, что я настоятельно рекомендую создать.
В коде это переменная PUBLISH_YEAR_FILTER.
Если у вас есть метаданные publish_year, вы можете установить годы как значения массива, и система будет извлекать статьи, опубликованные в указанные годы.
Генерация редиректов с помощью текстовых эмбеддингов OpenAI
Давайте выполним ту же задачу с моделью OpenAI "text-embedding-ada-002". Цель - показать разницу в результатах от Google Vertex AI.
Просто создайте новый файл ноутбука в том же каталоге, скопируйте и вставьте этот код и запустите его.
import os import time import logging from urllib.parse import urlparse import re import pandas as pd from pandas.errors import EmptyDataError from typing import Optional, List, Dict, Any from openai import OpenAI from pinecone import Pinecone, PineconeException from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type from IPython.display import clear_output # ─── ПОЛЬЗОВАТЕЛЬСКАЯ КОНФИГУРАЦИЯ ───────────────────────────────────────── INPUT_CSV = "redirect_candidates.csv" # Путь к входному CSV файлу OUTPUT_CSV = "redirect_map.csv" # Путь к выходному CSV файлу PINECONE_API_KEY = "YOUR_PINECONE_API_KEY" # Ваш API ключ Pinecone PINECONE_INDEX_NAME = "article-index-ada" # Название индекса Pinecone OPENAI_API_KEY = "YOUR_OPENAI_API_KEY" # Ваш API ключ OpenAI OPENAI_EMBEDDING_MODEL_ID = "text-embedding-ada-002" # ID модели эмбеддингов OpenAI
Хотя качество результата может считаться удовлетворительным, оно не достигает качества, наблюдаемого с Google Vertex AI.
В таблице ниже вы можете увидеть разницу в качестве результатов:
URL | Google Vertex | OpenAI |
---|---|---|
/what-is-eat/ | /google-eat/what-is-it/ | /5-things-you-can-do-right-now-to-improve-your-eat-for-google/408423/ |
/local-seo-for-lawyers/ | /law-firm-seo/what-is-law-firm-seo/ | /legal-seo-conference-exclusively-for-lawyers-spa/528149/ |
Когда дело доходит до SEO, даже несмотря на то, что Google Vertex AI в три раза дороже модели OpenAI, я предпочитаю использовать Vertex.
Качество результатов значительно выше. Хотя вы можете понести большие затраты за единицу обработанного текста, вы получаете преимущество превосходного качества результатов, что напрямую экономит ценное время на проверке и валидации результатов.
По моему опыту, обработка 20 000 URL с помощью Google Vertex AI стоит около $0.04.
Хотя говорят, что это дороже, это все еще смехотворно дешево, и вы не должны беспокоиться, если имеете дело с задачами, включающими несколько тысяч URL.
В случае обработки 1 миллиона URL прогнозируемая цена составила бы примерно $2.
Если вы все еще хотите бесплатный метод, используйте модели BERT и Llama от Hugging Face для генерации векторных эмбеддингов без платы за каждый API вызов.
Реальная стоимость исходит от вычислительной мощности, необходимой для запуска моделей, и вы должны сгенерировать векторные эмбеддинги всех ваших статей в Pinecone или любой другой векторной базе данных, используя эти модели, если будете делать запросы с использованием векторов, сгенерированных из BERT или Llama.
В заключение: ИИ - ваш мощный союзник
ИИ позволяет масштабировать ваши SEO или маркетинговые усилия и автоматизировать самые утомительные задачи.
Это не заменяет вашу экспертизу. Он создан для повышения ваших навыков и подготовки вас к встрече с вызовами с большими возможностями, делая процесс более увлекательным и веселым.
Овладение этими инструментами необходимо для успеха. Я увлечен написанием на эту тему, чтобы помочь новичкам учиться и чувствовать вдохновение.
По мере продвижения в этой серии мы исследуем, как использовать Google Vertex AI для создания плагина внутренних ссылок WordPress.
Комментарии