טירגוט של סוכן משתמש

בעבר, הכותרת User-Agent נכללה בבקשות להצעות מחיר כדי לספק נתוני טירגוט שימושיים, כמו הדפדפן והפלטפורמה של המכשיר שממנו נשלחה הבקשה. עם זאת, דפדפנים לרוב מצנזרים את User-Agent באופן משמעותי בגלל הקושי בשימוש בו, ובמטרה להגן טוב יותר על פרטיות המשתמשים. בתגובה לכך, Google תומכת ברמזים על הלקוח (Client Hints) לגבי הסוכן המשתמש, שנכללים בבקשות להצעות מחיר כשהם זמינים, כדי להשלים את כותרת הסוכן המשתמש. אפשר לקבל את רמזי הלקוח האלה (בקיצור) מכותרות Sec-Ch-UA*‎ או מ-Javascript Client Hints API.

כותרת User-Agent נחשפת כמחרוזת בשדה BidRequest.device.ua.

ההודעה UserAgent תאוכלס ברמזים על הלקוח (Client Hints) כשהם זמינים, אבל אחרת היא תאוכלס על סמך ערכים שנותחו מכותרת הסוכן המשתמש. השדה הזה מוצג בשדה BidRequest.device.sua.

מומלץ מאוד למגישי הצעות מחיר להשתמש בהודעה UserAgent במקום במחרוזת של סוכן המשתמש.

איך מאכלסים את UserAgent

בניגוד לכותרת User-Agent, ההודעה UserAgent מייצגת את סוכן המשתמש בחלוקה לכמה שדות של מידע ספציפי.

בהתאם לזמינות של רמזים ללקוח בבקשה להצגת מודעה, אפשר לאכלס את ההודעה UserAgent בדרכים הבאות:

  • אם הבקשה מכילה לפחות רמז לקוח אחד עם אנטרופיה נמוכה, הערך של UserAgent מאוכלס על סמך התוכן שלהם.
  • אם הבקשה מכילה רק את כותרת סוכן המשתמש, הערך UserAgent מאוכלס על סמך מה שאפשר לנתח מהכותרת.

דוגמה: מילוי הערך UserAgent על סמך הכותרת User-Agent

נניח שיש בקשה להצגת מודעה שבה הדפדפן שולח את הכותרות הבאות:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

UserAgent אוכלוס על סמך כותרת User-Agent בלבד עשוי להיראות כך:

browsers: [{ brand: "Mozilla", version: ["5", "0"] },
           { brand: "AppleWebKit", version: ["537", "36"] },
           { brand: "Chrome", version: ["103", "0", "0", "0"] },
           { brand: "Safari", version: ["537", "36"] }],
platform: { brand: "Windows NT", version: ["10", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
model: "x64",
source: USER_AGENT_STRING

דוגמה: מילוי הערך UserAgent על סמך רמזים על הלקוח (Client Hints)

נניח שיש בקשה להצגת מודעה שבה הדפדפן שולח את הכותרות הבאות:

User-Agent:                 Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Sec-Ch-Ua:                  ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
Sec-Ch-Ua-Arch:             x86
Sec-Ch-Ua-Full-Version:     103.0.5060.134
Sec-Ch-Ua-Mobile:           ?0
Sec-Ch-Ua-Platform:         Windows
Sec-Ch-Ua-Platform-Version: 15.0.0

במקרים שבהם נכללים רמזים על הלקוח (Client Hints) עם אנטרופיה נמוכה לפחות, הערך של UserAgent יאוכלס על סמך התוכן של הכותרות האלה, גם אם קיימות כותרות של סוכן משתמש (User-Agent). הוא ייראה כך:

browsers: [{ brand: ".Not/A)Brand", version: ["99", "0", "0", "0"] },
           { brand: "Google Chrome", version: ["103", "0", "5060", "134"] },
           { brand: "Chromium", version: ["103", "0", "5060", "134"] }],
platform: { brand: "Windows", version: ["15", "0", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
source: CLIENT_HINTS_HIGH_ENTROPY

אכלוס על סמך כותרת User-Agent לעומת רמזים על הלקוח (Client Hints)

חלק מהשדות מאוכלסים בצורה שונה, בהתאם לכך שהם מבוססים על כותרת User-Agent או על Client Hints. הנה סיכום של ההבדלים האלה:

  • בדפדפנים ובפלטפורמות זהים, הערכים UserAgent.browsers.brand ו-UserAgent.platform.brand יהיו לרוב שונים בין UserAgent שמבוסס על הכותרת User-Agent או על Client Hints. לדוגמה, יכול להיות ש-UserAgent.platform.brand יופיע כ-Windows NT אם הוא מבוסס על כותרת User-Agent, או כ-Windows אם הוא מבוסס על Client Hints.
  • חלק מהערכים של UserAgent.browsers ייחודיים לכותרת User-Agent או ל-Client Hints. לדוגמה, הערך AppleWebKit יופיע אם UserAgent יתבסס על כותרת User-Agent, ואילו הערך Chromium יופיע רק אם הוא יתבסס על Client Hints.
  • רק UserAgent שמבוסס על כותרת User-Agent יכול להכיל ערכים קפואים. לדוגמה, אם הפלטפורמה היא Windows 11 22H2,‏ UserAgent.platform.brand יוגדר כ-Windows NT ו-UserAgent.platform.version יוגדר כ-[“10”, “0”] כי זה הערך הקבוע לכל גרסת Windows מגרסה 10 ומעלה.

בדרך כלל, נתונים ב-UserAgent שמבוססים על רמזים של לקוחות לא יהיו תחליף לא מדויק למידע קפוא או מצונזר. אם יש חוסר עקביות בין הכותרת User-Agent לבין UserAgent שמבוסס על Client Hints, עדיף להשתמש במידע מ-UserAgent.

שדות של אובייקט UserAgent

בקטע הזה מופיע סיכום של כל שדה, עם דגש על התנהגות ספציפית של Google RTB ושיטות מומלצות לשימוש.

דפדפנים

התג מכיל רשימה של רשומות BrandVersion, שמסודרות בדרך כלל לפי רמת הספציפיות שלהן. לדוגמה, אם הייתם מפרטים את התוכן של browsers, יכול להיות שהתג brand של כל רשומה יופיע בסדר הבא:

מותג משמעות
Mozilla תואם ל-Mozilla
AppleWebKit מבוסס על AppleWebKit, קבוצת משנה של Mozilla.
Chrome דפדפן Chrome, קבוצת משנה של דפדפנים שתואמים ל-WebKit
Safari גרסה למחשב, בניגוד לגרסה לנייד.

הדפדפנים לא תמיד יופיעו ב-UserAgent בסדר מסוים, במיוחד אם הוא מבוסס על רמזים של לקוח. בהמשך מפורטים הבדלים נוספים שצפויים להופיע בהתאם לערך של source:

  • USER_AGENT: השדה version עשוי להצטמצם לגרסה ראשית או להיות קפוא (תלוי במדיניות הספציפית לסוכן). שימו לב שלא תהיה אינדיקציה לכך שהערך קפוא.
  • CLIENT_HINTS_LOW_ENTROPY ו-CLIENT_HINTS_HIGH_ENTROPY: הערכים לא מסודרים לפי שום קריטריון. לדוגמה, אותו דפדפן עשוי לשלוח את הערכים האלה בסדר שונה בכל בקשה. הן עשויות להכיל גם רשומה של GREASE, שצריך להתעלם ממנה.
  • CLIENT_HINTS_HIGH_ENTROPY: יכול להיות שכל השדות של version שמופיעים בדפדפנים יוגדרו לגרסאות מלאות.

פלטפורמה

רשומה של BrandVersion שמתארת את הפלטפורמה. יכול להיות שלא תהיה תאימות בין הכותרת User-Agent לבין Client Hints, ולכן יכול להיות שיהיה צורך לבדוק שני שמות כדי לטרגט פלטפורמות מסוימות. לדוגמה, מערכת ההפעלה Macintosh של אפל ממותגת כ-Macintosh בכותרת User-Agent, אבל כ-macOS ברמזים ללקוח. בהמשך מפורטים הבדלים נוספים שצפויים להופיע בהתאם לערך של source:

  • USER_AGENT: יכול להיות שהשדה version יצומצם לגרסה ראשית או יוקפא. חשוב לדעת שלא תהיה אינדיקציה לכך שהערך קפוא.
  • CLIENT_HINTS_LOW_ENTROPY: השדה version לא יאוכלס.
  • CLIENT_HINTS_HIGH_ENTROPY: יכול להיות שהשדה version מוגדר לגרסה המלאה.

נייד

מציין אם צריך לבצע אופטימיזציה של תוכן כמו מודעות למסכים קטנים או לקלט מגע. שימו לב: זה לא בהכרח מצביע על סוג המכשיר, כי אפשר להגדיר דפדפנים לנייד כך שיבקשו 'אתר למחשב'.

ארכיטקטורה

מזהה את הארכיטקטורה של הפלטפורמה, למשל x86 או arm.

אם משתמשים ב-UserAgent שמבוסס על רמזים על הלקוח, חשוב לדעת שהערך הזה יאוכלס רק אם source מוגדר ל-CLIENT_HINTS_HIGH_ENTROPY.

Bitness

מזהה את מספר הביטים של הפלטפורמה, למשל אם יש לה מעבד 32 ביט או 64 ביט. השדה הוא מחרוזת של מספר שלם שמספקת מידע נוסף על הארכיטקטורה שלו. לדוגמה, לארכיטקטורה מסוג x86 יכול להיות ערך של 32 או 64 בפרמטר bitness.

אם משתמשים ב-UserAgent שמבוסס על רמזים על הלקוח, חשוב לדעת שהערך הזה יאוכלס רק אם source מוגדר ל-CLIENT_HINTS_HIGH_ENTROPY.

דגם

מזהה את דגם המכשיר. במכשירים ניידים – כלומר לא במחשבים ניידים או במחשבים שולחניים – השדה הזה יאוכלס בשם דגם כמו Pixel 6 Pro.

בהמשך מפורטים ההבדלים שצפויים לכם בהתאם לערך של source:

  • USER_AGENT
    • מכשירים נייחים: השדה model יכיל לרוב ערך משולב של ארכיטקטורה ורוחב סיביות, כמו x64 עבור Windows. הערך הזה לא חוצה פלטפורמות. לדוגמה, יכול להיות שב-Linux נעשה שימוש בערך x86_64 עבור אותו חומרה.
    • מכשירים ניידים: השדה הזה לא יכלול ארכיטקטורה וביטים. אם אתם רוצים לראות את הערכים האלה, אפשר לעיין במאמרים בנושא UserAgent.architecture וUserAgent.bitness.
  • CLIENT_HINTS_LOW_ENTROPY: השדה model לא יאוכלס.
  • CLIENT_HINTS_HIGH_ENTROPY: השדה model יאוכלס רק עבור דגם המכשיר של מכשירים ניידים. לא הוגדר ערך לפלטפורמות למחשב.

מקור

מזהה את הכותרות ששימשו ליצירת UserAgent. במקרה של רמזים ללקוח, ההבחנה הזו מתייחסת גם לשני המקרים הבאים:

  • CLIENT_HINTS_LOW_ENTROPY: אפשר להשתמש רק באותות בסיסיים בצד הלקוח.
  • CLIENT_HINTS_HIGH_ENTROPY: יש איסוף אותות בצד הלקוח, כולל שדה אחד לפחות שמסווג כאנטרופיה גבוהה.