У сучасному SEO швидкість отримання даних визначає успіх. Ручна перевірка сотень посилань чи моніторинг видачі — це втрата часу. Puppeteer, бібліотека Node.js для керування Headless Chrome, дозволяє повністю автоматизувати ці процеси.

Парсинг даних та перевірка посилань за допомогою Puppeteer
Парсинг даних та перевірка посилань за допомогою Puppeteer

Навіщо використовувати Puppeteer?

Розгублений розробник у ноутбука, не розуміє, навіщо використовувати Puppeteer
Розгублений розробник у ноутбука, не розуміє, навіщо використовувати Puppeteer

На відміну від простих HTTP-запитів, Puppeteer рендерить JavaScript, що критично для сучасних SPA-сайтів.

  • Моніторинг видачі (SERP): Емуляція реального користувача для збору позицій.
  • Перевірка індексації: Автоматизація запитів site:domain.com для контролю сторінок у Google.
  • Скрапінг контактів: Масовий збір email та телефонів з сайтів конкурентів.

Технічний стек та швидкий старт

Для роботи вам знадобляться Node.js та встановлений пакет Puppeteer.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  
  // Приклад: Перевірка наявності посилання на сторінці
  await page.goto('https://example-site.com');
  const hasLink = await page.evaluate(() => {
    return !!document.querySelector('a[href*="your-site.com"]');
  });

  console.log(hasLink ? "Посилання знайдено" : "Посилання відсутнє");
  await browser.close();
})();

Практичні кейси автоматизації

Якщо ви ведете список донорів і сторінок розміщення (і хочете швидко знаходити майданчики під конкретні тематики), зручно тримати це в seocatalog.com.ua. А Puppeteer далі використати для нічної перевірки: чи сторінка жива (200/301/404) і чи посилання не зникло.

Headless-аудит: Автоматичне виявлення 404 помилок на сторінках донорів.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  const response = await page.goto('https://donor-site.com/backlink-page');

  if (response.status() === 404) {
    console.log('Помилка 404: Сторінку не знайдено, посилання втрачено.');
  } else {
    console.log(`Статус: ${response.status()}`);
  }
  await browser.close();
})();

Обхід блокувань: Використання puppeteer-extra-plugin-stealth та проксі для уникнення капчі.

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

(async () => {
  const browser = await puppeteer.launch({
    args: ['--proxy-server=http://IP:PORT'], // Вкажіть ваш проксі
    headless: true
  });
  const page = await browser.newPage();
  // Авторизація проксі, якщо потрібно
  // await page.authenticate({ username: 'user', password: 'password' });
  
  await page.goto('https://google.com/search?q=seo+tools');
  await page.screenshot({ path: 'search_result.png' });
  await browser.close();
})();

Збір даних для LeadGen: Автоматизація переходу по сторінках «Контакти» та витягування даних у Google Sheets через API.

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://competitor.com/contacts');

  const contacts = await page.evaluate(() => {
    const text = document.body.innerText;
    const emails = text.match(/[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+/g);
    return [...new Set(emails)]; // Тільки унікальні
  });

  console.log('Знайдені контакти:', contacts);
  // Тут викликається функція для Google Sheets API
  await browser.close();
})();

Етика та Google-френдлі підхід

Щоб ваші скрипти були «екологічними», завжди дотримуйтесь лімітів запитів та поважайте правила robots.txt. Автоматизація має на меті оптимізацію ресурсів, а не створення надмірного навантаження на сервери.

Етика та Google-френдлі підхід
Етика та Google-френдлі підхід