Техническое SEO быстро превращается в рутину, если каждый раз открывать одни и те же панели вручную. Хороший старт - вынести повторяемые проверки в небольшой сервис: собрать URL, запросить данные, нормализовать ответы и отдать список задач.

Логика регулярной проверки
URL-список
API и парсинг
Правила
Задачи

Минимальный TypeScript-скелет может выглядеть так:

type AuditResult = {
  url: string;
  status: "ok" | "warning" | "critical";
  issues: string[];
};

export async function auditPage(url: string): Promise<AuditResult> {
  const response = await fetch(url, { redirect: "follow" });
  const html = await response.text();
  const issues = [];

  if (!html.includes("<title>")) {
    issues.push("Нет title");
  }

  if (!html.includes('name="description"')) {
    issues.push("Нет meta description");
  }

  return {
    url,
    status: issues.length > 0 ? "warning" : "ok",
    issues
  };
}

Дальше этот слой легко расширять: добавить PageSpeed API, данные из Search Console, статусы индексации, проверку canonical, hreflang и sitemap.

Что важно для поисковых систем

Автоматизация не заменяет стратегию, но помогает не пропускать базовые проблемы:

  • индексируемость страниц;
  • корректные коды ответа;
  • уникальные title и description;
  • открытые для обхода CSS и JavaScript;
  • быстрый ответ сервера и стабильная верстка.

Главное - хранить результаты в истории. Тогда видно не только текущее состояние, но и момент, когда метрика начала проседать.