בעבר, הכותרת 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 במקום במחרוזת User-Agent.
איך מאכלסים את UserAgent
בניגוד לכותרת User-Agent, ההודעה UserAgent מייצגת את סוכן המשתמש
בחלוקה לכמה שדות של מידע ספציפי.
בהתאם לזמינות של רמזים ללקוח בבקשה להצגת מודעה, אפשר לאכלס את ההודעה UserAgent בדרכים הבאות:
- אם הבקשה מכילה לפחות רמז לקוח אחד עם אנטרופיה נמוכה, הערך של
UserAgentיאוכלס על סמך התוכן שלהם. - אם הבקשה מכילה רק את כותרת User-Agent, הערך
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 על סמך רמזים על הלקוח
נניח שיש בקשה להצגת מודעה שבה הדפדפן שולח את הכותרות הבאות:
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שמבוסס על כותרת סוכן המשתמש או על רמזים לגבי הלקוח. לדוגמה, יכול להיות ש-UserAgent.platform.brandיופיע כ-Windows NT אם הוא מבוסס על כותרת User-Agent, או כ-Windows אם הוא מבוסס על Client Hints. - חלק מהערכים של
UserAgent.browsersייחודיים לכותרת User-Agent או ל-Client Hints. לדוגמה, הערך AppleWebKit יופיע אםUserAgentיתבסס על כותרת User-Agent, ואילו הערך Chromium יופיע רק אם הוא יתבסס על רמזים ללקוח. - רק
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 entry, שצריך להתעלם ממנו. -
CLIENT_HINTS_HIGH_ENTROPY: יכול להיות שכל השדות שלversionשמופיעים בדפדפנים יוגדרו לגרסאות מלאות.
פלטפורמה
רשומה של BrandVersion
שמתארת את הפלטפורמה. יכול להיות שלא תהיה תאימות בין הכותרת User-Agent לבין רמזים ללקוח, ולכן יכול להיות שתצטרכו לבדוק שני שמות כדי לטרגט פלטפורמות מסוימות. לדוגמה, מערכת ההפעלה 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 בביט.
אם משתמשים ב-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: איסוף אותות בצד הלקוח זמין, כולל לפחות שדה אחד שמסווג כאנטרופיה גבוהה.