Генерация фида товаров для Facebook/Instagram Catalog

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Генерация фида товаров для Facebook/Instagram Catalog
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Генерация фида товаров для Facebook/Instagram Catalog

Meta требует фид в формате CSV, TSV или XML (RSS/Atom). Каталог используется в динамической рекламе (Dynamic Ads), Instagram Shopping и Shops — три разных плейсмента с частично пересекающимися требованиями к полям. Одна ошибка в формате поля price или availability приводит к отклонению всей партии товаров при загрузке.

Обязательные поля каталога

Поле Формат Пример
id строка до 100 символов SKU-44231
title строка до 150 символов Куртка зимняя мужская синяя L
description строка до 9999 символов
availability enum in stock / out of stock / preorder
condition enum new / refurbished / used
price число + код валюты 4990.00 RUB
link URL HTTPS обязательно
image_link URL мин. 500×500 px, HTTPS
brand строка

Дополнительные поля для одежды и обуви

Для категории Apparel & Accessories Meta требует:

  • google_product_category — числовой ID из таксономии Google (Meta использует именно её)
  • size — размер (XL, 44, 42/34)
  • color — цвет на языке целевой аудитории
  • gendermale / female / unisex
  • age_groupadult / kids / newborn
  • material — материал (опционально, но повышает relevance score)

Генератор CSV-фида

CSV проще в генерации и отладке, чем XML. Meta принимает оба формата одинаково.

class MetaCatalogFeedGenerator
{
    private const HEADERS = [
        'id', 'title', 'description', 'availability', 'condition',
        'price', 'link', 'image_link', 'additional_image_link',
        'brand', 'google_product_category', 'color', 'size',
        'gender', 'age_group', 'sale_price', 'sale_price_effective_date',
    ];

    public function generate(string $outputPath): void
    {
        $file = fopen($outputPath, 'w');
        // BOM не добавляем — Meta не требует, может сломать парсер
        fputcsv($file, self::HEADERS, "\t"); // TSV надёжнее CSV из-за запятых в описании

        Product::with(['images', 'category', 'brand', 'variants'])
            ->where('is_active', true)
            ->chunk(200, function ($products) use ($file) {
                foreach ($products as $product) {
                    foreach ($this->expandVariants($product) as $row) {
                        fputcsv($file, $row, "\t");
                    }
                }
            });

        fclose($file);
    }

    private function expandVariants(Product $product): array
    {
        if ($product->variants->isEmpty()) {
            return [$this->buildRow($product, null)];
        }

        return $product->variants->map(
            fn($variant) => $this->buildRow($product, $variant)
        )->toArray();
    }

    private function buildRow(Product $product, ?ProductVariant $variant): array
    {
        $id    = $variant ? $product->sku . '-' . $variant->sku : $product->sku;
        $price = $variant?->price ?? $product->price;
        $stock = $variant?->stock ?? $product->stock;

        $additionalImages = $product->images->skip(1)
            ->pluck('cdn_url')
            ->take(9) // Meta допускает до 10 изображений
            ->implode(',');

        $salePrice = '';
        $salePriceDate = '';
        if ($product->sale_price && $product->sale_ends_at > now()) {
            $salePrice = number_format($product->sale_price, 2, '.', '') . ' RUB';
            $salePriceDate = $product->sale_starts_at->toIso8601String()
                . '/' . $product->sale_ends_at->toIso8601String();
        }

        return [
            $id,
            mb_substr($product->name . ($variant ? ' ' . $variant->name : ''), 0, 150),
            strip_tags($product->description),
            $stock > 0 ? 'in stock' : 'out of stock',
            'new',
            number_format($price, 2, '.', '') . ' RUB',
            route('products.show', $product->slug) . ($variant ? '?variant=' . $variant->id : ''),
            $product->mainImage()?->cdn_url ?? '',
            $additionalImages,
            $product->brand?->name ?? '',
            $product->google_category_id ?? '',
            $variant?->color ?? $product->color ?? '',
            $variant?->size ?? '',
            $product->gender ?? '',
            $product->age_group ?? 'adult',
            $salePrice,
            $salePriceDate,
        ];
    }
}

Настройка в Business Manager

После генерации фида:

  1. Commerce Manager → Catalog → Data Sources → Add Data Feed
  2. Указать URL фида или загрузить файл вручную
  3. Выбрать расписание обновления: ежечасно, ежедневно или вручную
  4. Назначить каталог рекламным аккаунтам

Meta предоставляет диагностику ошибок в разделе Catalog → Issues — каждая позиция с проблемой помечается с описанием причины.

Pixel + Catalog для динамического ретаргетинга

Для Dynamic Ads недостаточно только фида — нужно настроить Meta Pixel с событиями:

// Страница товара
fbq('track', 'ViewContent', {
  content_ids: ['SKU-44231'],
  content_type: 'product',
  value: 4990.00,
  currency: 'RUB',
});

// Добавление в корзину
fbq('track', 'AddToCart', {
  content_ids: ['SKU-44231'],
  content_type: 'product',
  value: 4990.00,
  currency: 'RUB',
});

content_ids должны точно совпадать с полем id в каталоге — иначе матчинг не работает.

Сроки

Генератор фида + настройка источника данных в Business Manager — 3–4 рабочих дня. Интеграция с Pixel и тестирование динамического ретаргетинга — ещё 1–2 рабочих дня.