הכותרת User-Agent נכללה בעבר בבקשות להצעות מחיר, כדי לספק נתוני טירגוט שימושיים, כמו הדפדפן והפלטפורמה של המכשיר שמתחיל את התהליך. עם זאת, לעיתים קרובות דפדפנים מצנזרים בצורה קפדנית את ה-User-Agent בגלל הקושי בשימוש שלו וכדי להגן טוב יותר על פרטיות המשתמש. לכן, Google תומכת ב-User-Agent Client Hints, שכלולים בבקשות להצעות מחיר, כשהן זמינות, כדי להשלים את הכותרת User-Agent. המקור של רמזים אלה (או בקיצור) Client Hints הוא מכותרות Sec-Ch-UA* או מ-JavaScript Client Hints API.
בהתאם לפרוטוקול שבו משתמשים, הכותרת של סוכן המשתמש נחשפת באמצעות אחד משדות המחרוזת הבאים:
- Google:
BidRequest.user_agent
- OpenRTB:
BidRequest.device.ua
הודעת UserAgent
תאוכלס ב-Client Hints כשהם זמינים, אבל אחרת תאוכלס לפי הערכים שנותחו מהכותרת של User-Agent. המידע יוצג כאחד מהשדות הבאים, בהתאם לפרוטוקול שבו משתמשים:
- Google:
BidRequest.user_agent_data
- OpenRTB:
BidRequest.device.sua
מומלץ מאוד למגישי הצעות המחיר להשתמש בהודעה UserAgent
ולא במחרוזת ה-User-Agent.
איך מתבצע אכלוס של UserAgent
להבדיל מהכותרת של סוכן המשתמש, ההודעה UserAgent
מייצגת את פרטי סוכן המשתמש בחלוקה לשדות מרובים לגבי מידע ספציפי.
בהתאם לזמינות של רמזים על הלקוח בבקשה למודעה, אפשר לאכלס את ההודעה UserAgent
בדרכים הבאות:
- אם הבקשה מכילה לפחות רמזי לקוח מסוג low-entropy, השדה
UserAgent
יאוכלס על סמך התוכן שלהם. - אם הבקשה מכילה רק את הכותרת של סוכן המשתמש, השדה
UserAgent
יאוכלס בהתאם למה שאפשר לנתח מהכותרת.
דוגמה: אכלוס 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
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
במקרים שבהם נכללים לפחות רמזים נמוכים של לקוח באנטרופיה, השדה 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
אכלוס לפי הכותרת של סוכן המשתמש לעומת רמזים ללקוח
חלק מהשדות מאוכלסים באופן שונה בהתאם לכותרת של הסוכן המשתמש או לרמזים ללקוח. לפניכם סיכום של ההבדלים:
- בדפדפנים ובפלטפורמות זהים,
UserAgent.browsers.brand
ו-UserAgent.platform.brand
בדרך כלל יהיו שונים ביןUserAgent
בהתאם לכותרת של סוכן המשתמש או לרמזים ללקוח. לדוגמה,UserAgent.platform.brand
עשוי להופיע כ-"Windows NT" אם הוא מבוסס על הכותרת User-Agent, או בתור "Windows" אם הוא מבוסס על רמזים ללקוחות. - חלק מרשומות ה-
UserAgent.browsers
הן ייחודיות לכותרת של סוכן ה-User-Agent או ל-Client Hints. לדוגמה, 'AppleWebKit' יופיע אם הכותרתUserAgent
התבססה על הכותרת של סוכן המשתמש, ואילו 'Chromium' יופיע רק אם הוא היה מבוסס על רמזים ללקוחות. - רק
UserAgent
המבוסס על הכותרת של סוכן המשתמש יכול להכיל ערכים שהוקפאו. לדוגמה, אם הפלטפורמה הייתה Windows 11 22H2, הערך שלUserAgent.platform.brand
יוגדר כ-Windows NT ו-UserAgent.platform.version
יוגדר כ-[“10”, “0”]
כי זה הערך שהוקפא לכל גרסה של Windows בגרסה 10 ואילך או יותר.
בדרך כלל, הנתונים ב-UserAgent
שמבוססים על 'רמזים ללקוחות' לא יהוו תחליף לא מדויק למידע שהוקפא או שצונזר. במקרה של חוסר עקביות בין הכותרת של ה-User-Agent לבין הכותרת UserAgent
על סמך 'רמזים ללקוח', כדאי לבחור את המידע מהשדה UserAgent
.
שדות אובייקט של סוכן משתמש
בקטע הזה מופיע סיכום של כל שדה, עם התמקדות בהתנהגות הספציפית ל-RTB ובשיטות המומלצות לשימוש של Google.
דפדפן
מכילה רשימה של ערכי BrandVersion שמסודרים בדרך כלל לפי ספציפיות. לדוגמה, אם מציינים את התוכן של browsers
, השדה brand
של כל רשומה עשוי להופיע בסדר הבא:
מותג | משמעות |
Mozilla | תואם Mozilla |
AppleWebKit | שמבוססת על AppleWebKit, קבוצת משנה של Mozilla. |
Chrome | דפדפן Chrome, קבוצת משנה של דפדפנים שתואמים ל-AppleWebKit |
Safari | גרסה למחשב, בניגוד לנייד. |
ב-UserAgent
לא תמיד יוצגו דפדפנים בסדר מסוים, במיוחד
אם הוא מבוסס על רמזים ללקוחות. בהמשך מתוארים הבדלים אחרים
שצפויים להתרחש על סמך הערך של source
:
USER_AGENT
: יכול להיות שהשדהversion
יוקטן לגרסה ראשית או יקפוץ (בהתאם למדיניות הספציפית לסוכן). שימו לב שהערך לא יופיע כאינדיקציה לכך.CLIENT_HINTS_LOW_ENTROPY
ו-CLIENT_HINTS_HIGH_ENTROPY
: הרשומות לא מסודרות לפי קריטריונים כלשהם. לדוגמה, אותו דפדפן עשוי לשלוח את הערכים האלה בסדר שונה בכל בקשה. הם עשויים גם להכיל ערך GREASE, שיש להתעלם ממנו.CLIENT_HINTS_HIGH_ENTROPY
: כל השדותversion
שנמצאים בדפדפנים עשויים להיות מוגדרים לגרסאות מלאות.
הפלטפורמה
רשומת BrandVersion שמתארת את הפלטפורמה. ייתכן שההגדרה הזו לא תותאם לכותרת User-Agent ולרמזים ללקוח, ולכן ייתכן שיהיה צורך לבדוק שני שמות לטירגוט לפלטפורמות מסוימות. לדוגמה, מערכת ההפעלה Macintosh של Apple מתויגת כ-"Macintosh" בכותרת User-Agent, אבל "macOS" ב-Client Hints.
בהמשך מתוארים הבדלים אחרים שאתם צפויים לראות על סמך הערך של source
:
USER_AGENT
: יכול להיות שהשדהversion
יוקטן לגרסה ראשית או להקפיא. לתשומת ליבכם: לא תהיה אינדיקציה לכך שהערך תקוע.CLIENT_HINTS_LOW_ENTROPY
: השדהversion
לא יאוכלס.CLIENT_HINTS_HIGH_ENTROPY
: אפשר להגדיר את השדהversion
לגרסה המלאה.
נייד
בעמודה הזו מציינים אם צריך לבצע אופטימיזציה של תוכן כמו מודעות למסכים קטנים ו/או לקלט מגע. שימו לב שזה לא בהכרח מציין את סוג המכשיר, כי אפשר להגדיר דפדפנים לנייד כך שיבקשו 'אתר למחשב'.
אדריכלות
מזהה את הארכיטקטורה של הפלטפורמה, למשל x86 או arm.
ל-UserAgent
שמבוסס על 'רמזים ללקוח', חשוב לשים לב שהערך הזה יאוכלס רק
כשהערך של source
מוגדר ל-CLIENT_HINTS_HIGH_ENTROPY
.
ביט
משמש לזיהוי הסיביות של הפלטפורמה, למשל אם יש בה מעבד (CPU) של 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 אפשר גם להבחין בין שני המקרים הבאים:
CLIENT_HINTS_LOW_ENTROPY
: ניתן לקבל רק רמזים בסיסיים ללקוח.CLIENT_HINTS_HIGH_ENTROPY
: רמזים על הלקוח (Client Hints) זמינים, כולל לפחות שדה אחד שמסווג כאנטרופיה גבוהה.