בעבר, הכותרת 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: יש איסוף אותות בצד הלקוח, כולל שדה אחד לפחות שמסווג כאנטרופיה גבוהה.