Pinterest — не просто соцсеть для рецептов и идей. Это мощная визуальная поисковая система, которая может приводить целевой трафик на статьи, если правильно «подружить» её с сайтом. В этом руководстве я покажу, как сделать так, чтобы Pinterest сам находил новые статьи, подхватывал картинки и описания и создавал пины — без ручного копирования.
Что нужно:
Сайт на любом движке (можно просто HTML-файлы)
Доступ к редактированию кода страниц
Node.js на сервере (или локально, чтобы генерировать RSS и заливать на сервер)
Бизнес-аккаунт Pinterest
Весь код, который я даю, написан на чистом JavaScript (Node.js).
Шаг 1. Подтверждаем владение сайтом в Pinterest
Pinterest должен знать, что вы хозяин домена. Для этого он выдаёт специальный метатег.
Зайдите в Pinterest Business Hub → «Подтвердить сайт».
Выберите способ «Метатег».
Скопируйте тег вида:
<meta name="p:domain_verify" content="12ac6ff1eaa70a3386sg439fda58bbb6"/>Вставьте этот тег в
<head>главной страницы вашего сайта.Нажмите «Подтвердить» в Pinterest.
После этого Pinterest начнёт сканировать ваш сайт в поиске страниц, размеченных для Rich Pins.
Шаг 2. Добавляем метатеги для каждой статьи
Теперь каждую страницу со статьёй нужно «разметить» — указать Pinterest, что это статья, какое у неё описание, картинка и дата.
Вставьте в <head> каждой страницы статьи следующие теги:
<!-- Указываем, что это статья --> <meta name="is_article" content="true"> <!-- Описание, которое Pinterest покажет под пином (150–200 символов, интригующее) --> <meta name="pinterest_description" content="Задумывались ли вы, почему одни сайты удерживают внимание с первых секунд, а другие хочется закрыть? Всё дело в первом впечатлении. Узнайте, как выстроить интерфейс, чтобы снизить тревожность и завоевать доверие."> <!-- Прямая ссылка на картинку для пина (вертикальная, 1000×1500, яркая) --> <meta name="pinterest_image" content="https://ваш-сайт/images/article-cover.webp"> <!-- Дата публикации в формате ISO 8601 с часовым поясом --> <meta name="article_published_at" content="2026-04-03T12:00:00+03:00">
Важные моменты:
Картинка должна быть доступна по HTTPS и весить не больше 2 МБ.
Если не указать
pinterest_image, Pinterest возьмёт первое изображение на странице — часто это логотип или иконка.Описание не должно быть слишком длинным (обрежется).
Шаг 3. Генерируем RSS-ленту со статьями
Pinterest умеет читать RSS-ленту. Если вы отдадите ему ссылку на rss.xml, он сам будет периодически проверять её и создавать пины для новых записей.
Я написал скрипт на Node.js, который:
обходит все HTML-файлы сайта,
находит те, где есть
<meta name="is_article">,вытаскивает из них заголовок, описание, картинку и дату,
создаёт файл
rss.xml.
Скопируйте код ниже и сохраните как generate-rss.js (перед этим замените ВАШ_САЙТ и другие настройки).
(Создайте в корневой папке вашего проекта папку scripts (если её нет) и поместите туда файл generate-rss.js)
import fs from 'node:fs/promises'; import path from 'node:path'; import * as cheerio from 'cheerio'; // ================== НАСТРОЙКИ (ПРОПИШИТЕ СВОИ) ================== // Базовый URL вашего сайта (без слеша в конце) const BASE_URL = 'https://ВАШ_САЙТ.ru'; // Папка, где лежат готовые HTML-файлы сайта (обычно dist или public) // Скрипт запускается из корня проекта, где находится эта папка const ROOT_DIR = path.resolve(process.cwd(), 'dist'); // Куда сохранять RSS-файл (обычно в ту же папку, чтобы он был доступен по /rss.xml) const OUTPUT_RSS_PATH = path.join(ROOT_DIR, 'rss.xml'); // Название и описание RSS-канала (видны в Pinterest) const CHANNEL_TITLE = 'Название вашего блога'; const CHANNEL_DESCRIPTION = 'Описание: статьи о разработке, SEO, дизайне'; // ================== ДАЛЬШЕ КОД НЕ ТРОГАЕМ ================== function escapeXml(value = '') { return value .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function getMimeTypeByExt(urlOrPath = '') { const ext = urlOrPath.split('.').pop()?.toLowerCase(); switch (ext) { case 'jpg': case 'jpeg': return 'image/jpeg'; case 'png': return 'image/png'; case 'webp': return 'image/webp'; case 'gif': return 'image/gif'; default: return 'image/*'; } } function buildArticleUrl(filePath) { const relativePath = path.relative(ROOT_DIR, filePath).replace(/\\/g, '/'); return `${BASE_URL}/${relativePath}`; } function buildImageUrl(src) { if (!src) return ''; if (/^https?:\/\//i.test(src)) return src; if (src.startsWith('/')) return `${BASE_URL}${src}`; return `${BASE_URL}/${src}`; } async function collectHtmlFiles(dir) { const entries = await fs.readdir(dir, { withFileTypes: true }); const files = []; for (const entry of entries) { const fullPath = path.join(dir, entry.name); if (entry.isDirectory()) { const nested = await collectHtmlFiles(fullPath); files.push(...nested); } else if (entry.isFile() && entry.name.endsWith('.html')) { files.push(fullPath); } } return files; } async function parseArticle(filePath) { const content = await fs.readFile(filePath, 'utf8'); const $ = cheerio.load(content); const isArticle = $('meta[name="is_article"]').length > 0; if (!isArticle) return null; const title = $('h1').first().text().trim() || 'Без заголовка'; const pinterestDescription = $('meta[name="pinterest_description"]').attr('content')?.trim() || ''; const pinterestImg = $('meta[name="pinterest_image"]').attr('content'); let firstImgSrc = $('img').first().attr('src') || ''; if (firstImgSrc.endsWith('.svg')) firstImgSrc = ''; const imageUrl = buildImageUrl(pinterestImg || firstImgSrc); let pubDate; const articleDateMeta = $('meta[name="article_published_at"]').attr('content'); if (articleDateMeta) { const parsed = new Date(articleDateMeta); if (!isNaN(parsed.getTime())) pubDate = parsed; } if (!pubDate) { const stat = await fs.stat(filePath); pubDate = stat.mtime; } return { title, pinterestDescription, url: buildArticleUrl(filePath), imageUrl, pubDate }; } function buildRssXml(items) { const itemsXml = items.map(item => { const enclosure = item.imageUrl ? `\n <enclosure url="${escapeXml(item.imageUrl)}" type="${getMimeTypeByExt(item.imageUrl)}" />` : ''; return ` <item> <title>${escapeXml(item.title)}</title> <link>${escapeXml(item.url)}</link> <description><![CDATA[${item.pinterestDescription}]]></description> <pubDate>${item.pubDate.toUTCString()}</pubDate>${enclosure} </item>`; }).join('\n'); return `<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>${escapeXml(CHANNEL_TITLE)}</title> <link>${escapeXml(BASE_URL)}</link> <description>${escapeXml(CHANNEL_DESCRIPTION)}</description>${itemsXml} </channel> </rss>`; } async function main() { console.log('🔍 Поиск HTML в:', ROOT_DIR); const htmlFiles = await collectHtmlFiles(ROOT_DIR); console.log(`📄 Найдено HTML: ${htmlFiles.length}`); const articles = []; for (const filePath of htmlFiles) { const article = await parseArticle(filePath); if (article) articles.push(article); } console.log(`📰 Статей с is_article: ${articles.length}`); if (!articles.length) { console.warn('⚠️ Нет статей. RSS не создан.'); return; } articles.sort((a, b) => b.pubDate - a.pubDate); const rssXml = buildRssXml(articles); await fs.writeFile(OUTPUT_RSS_PATH, rssXml, 'utf8'); console.log(`✅ RSS сохранён: ${OUTPUT_RSS_PATH}`); } main().catch(err => { console.error('❌ Ошибка:', err); process.exit(1); });
Как использовать:
Установите Node.js на сервер (или на свой компьютер, если сможете заливать сгенерированный
rss.xmlна сервер вручную).Установите зависимости:
npm install cheerioЗамените в коде
ВАШ_САЙТ,ROOT_DIR(путь к папке с HTML) и настройки канала.Запустите скрипт:
node generate-rss.jsУбедитесь, что по адресу
https://ваш-сайт/rss.xmlоткрывается XML-файл со списком статей.
Если вы не можете запускать Node.js на сервере, сгенерируйте RSS локально и загрузите файл через FTP в корень сайта. Главное, чтобы он был доступен по постоянной ссылке.
Шаг 4. Отдаём RSS Pinterest
Теперь нужно «скормить» Pinterest ссылку на RSS.
В бизнес-аккаунте Pinterest перейдите в раздел «Создать» → «Rich Pins» (или «Каналы» → «Применить»).
Выберите тип «RSS-канал».
Вставьте адрес вашего RSS:
https://ваш-сайт/rss.xmlНажмите «Подтвердить» и «Применить».
Pinterest проверит канал и начнёт его периодически сканировать. Обычно первые пины появляются в течение 24 часов.
Шаг 5. Как это работает в автоматическом режиме
После настройки всё происходит без вашего участия:
Вы публикуете новую статью на сайте (добавляете HTML-файл с метатегами из шага 2).
Запускаете скрипт
generate-rss.js— он обновляетrss.xml.Pinterest через некоторое время (обычно 6–24 часа) считывает обновлённый RSS.
Для каждой новой записи Pinterest создаёт пин:
заголовок берётся из
<title>статьи или из заголовка RSS,описание — из
pinterest_description,картинка — из
pinterest_image,ссылка ведёт на статью.
Если вы хотите полную автоматизацию, добавьте вызов скрипта после публикации статьи (например, через хук в CI/CD или cron). Но даже если вы будете запускать его вручную раз в день — это быстрее, чем создавать десятки пинов руками.
Итог
Такая связка (метатеги + RSS + Pinterest) превращает ваш блог в источник автоматического трафика. Вы один раз настраиваете разметку и генератор RSS, а Pinterest сам забирает новые статьи и создаёт пины.
Попробуйте — и вы увидите, как старые статьи получают вторую жизнь.
