מפתחים נתקלים לעיתים קרובות בשגיאות בעת הגדרת פיד עבור קטלוג TikTok: אי-התאמה בין sku_id ל-Pixel, פורמט שגוי, או שדות חובה חסרים. כתוצאה מכך, מודעות נכשלות בבדיקת האישור ותקציב הפרסום מתבזבז. אנו מתמקדים ב-TikTok Ads Catalog, המשמש למודעות Video Shopping Ads דינמיות ומודעות Catalog Ads. ללא פיד תקין, מודעות לא יציגו את המוצרים הנכונים, ואירועי Pixel לא יותאמו — סיבה נפוצה ליעילות נמוכה של קמפיינים.
ניסיון עם 50+ חנויות מקוונות בנישות מבגדים ועד אלקטרוניקה הראה: פיד מובנה כראוי מקצר את זמן הבדיקה ביומיים–שלושה ומעלה את שיעור ההקלקות (CTR) ב-30–40%. בנינו גנרטור ב-PHP (Laravel) שמטפל בווריאציות, הנחות ותמונות נוספות. במאמר זה נסקור שדות חובה, פורמט פיד ואינטגרציית Pixel.
אילו שדות נדרשים עבור פיד קטלוג TikTok?
| שדה | דרישה |
|---|---|
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 פיקסלים |
condition |
new / refurbished / used |
שדות נוספים לשיפור ביצועים
-
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.
CSV או XML: מה עדיף עבור הקטלוג שלך?
| פרמטר | CSV | XML |
|---|---|---|
| קלות הפקה | גבוהה | בינונית |
| תמיכה בווריאציות | דורש שורות נפרדות | קל דרך אלמנטים מקוננים |
| גודל קובץ | קטן יותר | גדול יותר |
| המלצה | עד 100 אלף מוצרים | מעל 100 אלף או וריאציות מורכבות |
CSV פשוט יותר ליישום, אך XML מציע גמישות רבה יותר. בנתונים שלנו, קטלוגים עם פיד XML מציגים בממוצע CTR גבוה ב-20% הודות להעברת וריאציות מדויקת יותר.
כיצד video_link משפר את יעילות Video Shopping Ads?
שימוש ב-video_link בפיד מעלה את ה-CTR של Video Shopping Ads ב-40% (נתונים מדוחות TikTok). ללא וידאו, פורמט המודעה לא מופעל, ולכן כדי למקסם ביצועים, הקפידו להוסיף קליפים בפורמט mp4 עד 30 שניות.
כיצד להגדיר גנרטור פיד: 5 שלבים
- הגדירו מבנה מוצר:
sku_id,title,price,availability,link,image_link. - יישמו גנרטור ב-PHP (Laravel) עם טעינת נתונים בקבוצות (chunk loading) עבור קטלוגים גדולים.
- הוסיפו שדות נוספים:
brand,google_product_category,video_link,sale_price. - הגדירו אירועי Pixel עם העברת
content_id. - העלו את הפיד ל-TikTok Ads Manager ובדקו את האישור.
איך נראה גנרטור ה-PHP?
הכנו מחלקת TikTokCatalogFeedGenerator שפותרת בעיה טיפוסית: הפקת פיד CSV עם וריאציות. היא טוענת מוצרים עם תמונות, מותג, וריאציות ווידאו, ואז כותבת שורות תוך התחשבות בהנחות ומלאי. הקוד משתמש בתבנית Repository ובטעינת נתונים בקבוצות עבור קטלוגים גדולים.
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 עבור ריטרגוטינג דינמי
TikTok Pixel חייב להעביר 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(); } } שתואם ל-content_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, }); מדוע הגדרת פיד נכונה חשובה?
שדות שגויים, אי-התאמה בין sku_id ל-Pixel, או פורמט לא נכון הם סיבות נפוצות ליעילות נמוכה של מודעות. לדוגמה, אם 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, }); אינו תואם ל-sku_id ב-Pixel, ריטרגוטינג לא יעבוד — מוצרים לא יוצגו למשתמשים שכבר צפו בהם. בפועל, ראינו פרויקטים שבהם בגלל היעדר sku_id, Video Shopping Ads לא רצו במשך שבועות.
מה כלול בעבודה?
- גנרטור פיד ב-PHP (Laravel) עם תמיכה בווריאציות ושדות נוספים.
- הגדרת TikTok Pixel עם העברת
content_idנכונה. - ייבוא פיד ל-TikTok Ads Manager ואימות קטלוג.
- תיעוד על עדכון פיד (cron, queue).
- בדיקת אירועי Pixel דרך TikTok Events Manager.
- הדרכה לצוות שלך: אנחנו מסבירים הכל פעם אחת.
מגבלות קטלוג TikTok: מקסימום 10 מיליון מוצרים בקטלוג, גודל קובץ פיד מקסימלי 4 GB (CSV) או 2 GB (XML). תמונות ללא רקע (רקע לבן) מציגות CTR טוב יותר במודעות Shopping — זה מאושר על ידי נתונים ממחקרי מקרה פתוחים. כתובת ה-URL של הפיד חייבת להיות נגישה ללא אימות ולהחזיר תשובה תוך פחות מ-30 שניות. עבור קטלוגים גדולים, אנו מייצרים את הקובץ מראש ומגישים אותו כקובץ סטטי.
לוחות זמנים
גנרטור פיד והגדרת קטלוג ב-TikTok Ads Manager — 2–4 ימי עסקים. אם משתמשים בייבוא פיד מ-Google Shopping — יום עסקים אחד. צרו קשר — נבחן את הפרויקט שלכם תוך 24 שעות.
אנו מבטיחים שהפיד יעבור את בדיקת האישור של TikTok בפעם הראשונה. זה מאושר על ידי הניסיון שלנו: 10+ אינטגרציות מוצלחות באזורי זמן שונים.
הזמינו פיתוח של גנרטור פיד עבור הסטack שלכם — קבלו פתרון מוכן תוך 2–4 ימים. קבלו ייעוץ על הגדרת פיד ו-Pixel.







