Генерація фіду товарів для TikTok Catalog

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Генерація фіду товарів для TikTok Catalog
Середня
від 1 робочого дня до 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

Генерація каталогів товарів для TikTok Catalog

TikTok Shop та TikTok Ads Catalog — два різних продукти з різними вимогами до каталогів. TikTok Ads Catalog використовується для динамічної реклами у форматі Video Shopping Ads та Catalog Ads, TikTok Shop — окремена торгова платформа з суворішими обмеженнями за регіонами (доступна у США, Великобританії, Південно-Східній Азії). Цей матеріал про TikTok Ads Catalog, доступний у більшості рекламних ринків.

Формати каталогу

TikTok приймає:

  • CSV/TSV — найпростіший варіант для початку
  • XML — гнучкіший при складній структурі варіантів
  • Google Shopping feed — TikTok вміє імпортувати каталоги GMC напряму, що спрощує старт

Обов'язкові поля TikTok Catalog

Поле Вимога
sku_id унікальний ідентифікатор, рядок до 50 символів
title до 255 символів
price число, без символу валюти
currency ISO 4217 (USD, EUR, RUB)
availability in_stock / out_of_stock / preorder
link URL сторінки товару, HTTPS
image_link URL основного зображення, мін. 500×500 px
condition new / refurbished / used

Додаткові поля для Performance

  • brand — бренд. Впливає на релевантність аудиторних матчів
  • google_product_category — TikTok використовує ту саму таксономію, що Google
  • description — до 5000 символів; використовується в автоматичних текстах оголошень
  • sale_price + sale_price_effective_date — відображається як скидка у карточці товару
  • additional_image_link — до 10 додаткових зображень через кому
  • video_link — посилання на mp4-відео товару (до 30 сек) — критично важливо для Video Shopping Ads

Генератор на PHP

class TikTokCatalogFeedGenerator
{
    public function generate(string $outputPath): void
    {
        $headers = [
            'sku_id', 'title', 'price', 'currency', 'availability',
            'condition', 'link', 'image_link', 'additional_image_link',
            'description', 'brand', 'google_product_category',
            'sale_price', 'sale_price_effective_date',
            'color', 'size', 'age_group', 'gender', 'material',
            'video_link',
        ];

        $fp = fopen($outputPath, 'w');
        fputcsv($fp, $headers);

        Product::with(['images', 'brand', 'variants', 'video'])
            ->active()
            ->chunk(500, function ($products) use ($fp, $headers) {
                foreach ($products as $product) {
                    $rows = $product->variants->isNotEmpty()
                        ? $this->rowsFromVariants($product)
                        : [$this->rowFromProduct($product)];

                    foreach ($rows as $row) {
                        fputcsv($fp, $row);
                    }
                }
            });

        fclose($fp);
    }

    private function rowFromProduct(Product $p, ?ProductVariant $v = null): array
    {
        $price     = $v?->price ?? $p->price;
        $stock     = $v?->stock ?? $p->stock;
        $skuId     = $v ? $p->sku . '_' . $v->sku : $p->sku;
        $salePrice = '';
        $saleDates = '';

        if ($p->sale_price && $p->sale_ends_at?->isFuture()) {
            $salePrice = number_format($p->sale_price, 2, '.', '');
            $saleDates = $p->sale_starts_at->toIso8601String()
                . '/' . $p->sale_ends_at->toIso8601String();
        }

        $additionalImages = $p->images->skip(1)->pluck('cdn_url')->take(9)->implode(',');

        return [
            $skuId,
            mb_substr($p->name . ($v ? ' ' . $v->option_label : ''), 0, 255),
            number_format($price, 2, '.', ''),
            'RUB',
            $stock > 0 ? 'in_stock' : 'out_of_stock',
            'new',
            route('products.show', $p->slug) . ($v ? '?v=' . $v->id : ''),
            $p->mainImage()?->cdn_url ?? '',
            $additionalImages,
            mb_substr(strip_tags($p->description), 0, 5000),
            $p->brand?->name ?? '',
            $p->google_category_id ?? '',
            $salePrice,
            $saleDates,
            $v?->color ?? $p->color ?? '',
            $v?->size ?? '',
            $p->age_group ?? 'adult',
            $p->gender ?? '',
            $p->material ?? '',
            $p->video?->cdn_url ?? '',
        ];
    }

    private function rowsFromVariants(Product $p): array
    {
        return $p->variants->map(fn($v) => $this->rowFromProduct($p, $v))->toArray();
    }
}

Pixel Events для динамічного ретаргетингу

TikTok Pixel має передавати content_id, який збігається з sku_id у каталозі:

ttq.track('ViewContent', {
  contents: [{ content_id: 'SKU-12345', content_type: 'product', quantity: 1, price: 4990 }],
  currency: 'RUB',
  value: 4990,
});

ttq.track('AddToCart', {
  contents: [{ content_id: 'SKU-12345', content_type: 'product', quantity: 1, price: 4990 }],
  currency: 'RUB',
  value: 4990,
});

Обмеження TikTok Catalog

  • Максимум 10 млн товарів на каталог
  • Максимальний розмір файлу каталогу — 4 ГБ (CSV) або 2 ГБ (XML)
  • Зображення без фону (білий фон) показують кращий CTR у Shopping Ads
  • URL каталогу має бути доступний без авторизації та повертати каталог менше ніж за 30 секунд — при великих каталогах варто пред-генерувати файл, а не генерувати на льоту

Терміни

Генератор каталогу та налаштування каталогу в TikTok Ads Manager — 2–4 робочих дні. Якщо використовується імпорт Google Shopping feed — 1 робочий день.