Tôi dám cá với các bạn là bạn đã đọc chán chê các khái niệm này trên internet và có rất nhiều trang web diễn giải về điều này. Nhưng thực sự với một newbie thì header bidding vẫn còn là một cái gì đó khá xa lạ (nhất là với người Việt Nam) và rối rắm, khó hiểu.
Ở bài này, tôi sẽ giải thích trên góc cạnh cố gắng loại bỏ các từ chuyên môn, chuyên ngành về quảng cáo để bạn dễ hình dung nhất. Vậy tóm lại :
Header bidding là gì ?
Header bidding theo như tôi biết là một khái niệm mới xuất hiện và được phát triển cơ bản đầu tiên từ mạng AppNexus (prebid.js – mã nguồn mở để thực thi hình thức này). Header bidding là giải pháp quảng cáo khá toàn diện cho các website có lượng inventory và traffic lớn nhằm tối đa hoá doanh thu ở mức độ tốt nhất.
Khi bạn có một website/app, bạn muốn tìm cơ hội để có được tiền từ website/app đó, bạn tìm đến các nhà phân phối quảng cáo (SSP) đơn giản như : Google adsense, MGID, Admicro, Lava,… để đặt code quảng cáo lên site, thu hút người dùng xem hay click quảng cáo đó => Bạn có tiền!
Ok, đối với mức cơ bản, điều đó là đủ với mong muốn của bạn, nhưng nếu website của bạn có lượng traffic lớn và dần bạn nhận ra Adsense hay các mạng quảng cáo khác đều không thể đem lại doanh thu cao nhất mà bạn mong muốn thì sao ? Bạn sẽ tìm cách tối ưu vị trí trên site/app để đạt mục đích ? Làm xong, bạn vẫn chưa hài lòng ? Bạn lại tìm đến một nhà mạng nào đó mà họ offer cho bạn giá tốt nhất hoặc bạn đặt các quảng cáo trực tiếp theo kiểu combo : 1 banner + 1 url click vào 1 vị trí tuỳ chọn => Bạn được tiền với giá cố định cao hơn giá của Adsense.
Tình huống sẽ được đẩy cao hơn, bạn lúc này vẫn chưa thoả mãn với giá đó vì bạn nghĩ rằng website/app của bạn phải xứng đáng đạt giá cao hơn giá đó, cơ mà do nhà mạng hay người muốn đặt quảng cáo lên site của bạn không thể trả gía cao hơn thì sao ? Lúc này, theo thói quen, bạn sẽ loay hoay việc lắp các quảng cáo tùm lum lên site, chỗ A thì đặt Adsense, chỗ B đặt MGID, chỗ C đặt quảng cáo của nhà phân phối C nào đó. => Vẫn chưa xi nhê gì ?
Rồi, bạn chợt nhận ra, tại sao không cho hết các nhà mạng phân phối kia vào 1 vị trí nhỉ ? Nhưng làm cách nào để chỉ hiển thị loại quảng cáo giá tốt nhất ? => Câu trả lời chính là Header Bidding !
Bản chất của Header bidding là trên một inventory (vị trí, targeting, location,…) cho phép các SSP có thể đấu giá với nhau trong cùng 1 thời điểm, ai thắng thì được hiển thị, thì như vậy, bạn sẽ đạt doanh thu tốt nhất mà khỏi phải suy nghĩ lắp quảng cáo nào cho phù hợp. AppNexus đã nhận ra vấn đề này từ lâu vì các website có lượng traffic lớn mong muốn tìm được giá trị chính xác và giá cao nhất có thể đạt được cho các inventory của họ nên AppNexus đã phát triển một mã nguồn mở gói gọn là prebid.js (đọc thêm tại prebid.org). Thông qua một script được lập trình và cho phép các SSP có thể có “tiếng nói chung” hay đơn giản là cùng “hoà mạng” để chiến đấu với nhau, cạnh tranh giá với nhau để được xuất hiện quảng cáo của họ ở vị trí inventory của chủ website.
Như vậy, có thể hiểu Header Bidding là script điều khiển, kết nối tất cả các nhà phân phối quảng cáo và đưa ra luật chơi chung. Các SSP nhảy vào sân chơi và tuân thủ luật của header bidding, người được lợi sẽ là chủ website/app. Kẻ bất lợi chính là những SSP yếu (ít quảng cáo, giá không đủ cạnh tranh,..) sẽ bị loại khỏi các cuộc đấu giá.
Làm sao để triển khai Header Bidding?
Cấp độ triển khai cơ bản nhất của header bidding là bê nguyên cái sample của prebid.org tại đây : http://prebid.org/dev-docs/examples/basic-example.html.
Header bidding có thể triển khai dưới các hình thức qua DFP hay server side (không cần hiểu thằng này cho lắm), ở link trên là mẫu dùng cho dfp hay Ad Manager:
[code]
<html><head>
<link rel=”icon” type=”image/png” href=”/favicon.png”>
<script async src=”//www.googletagservices.com/tag/js/gpt.js”></script>
<script async src=”//acdn.adnxs.com/prebid/not-for-prod/1/prebid.js”></script>
<script>
var div_1_sizes = [
[300, 250],
[300, 600]
];
var div_2_sizes = [
[728, 90],
[970, 250]
];
var PREBID_TIMEOUT = 1000;
var FAILSAFE_TIMEOUT = 3000;
var adUnits = [
{
code: ‘/19968336/header-bid-tag-0’,
mediaTypes: {
banner: {
sizes: div_1_sizes
}
},
bids: [{
bidder: ‘appnexus’,
params: {
placementId: 13144370
}
}]
},
{
code: ‘/19968336/header-bid-tag-1’,
mediaTypes: {
banner: {
sizes: div_2_sizes
}
},
bids: [{
bidder: ‘appnexus’,
params: {
placementId: 13144370
}
}]
}
];
// ======== DO NOT EDIT BELOW THIS LINE =========== //
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
googletag.cmd.push(function() {
googletag.pubads().disableInitialLoad();
});
var pbjs = pbjs || {};
pbjs.que = pbjs.que || [];
pbjs.que.push(function() {
pbjs.addAdUnits(adUnits);
pbjs.requestBids({
bidsBackHandler: initAdserver,
timeout: PREBID_TIMEOUT
});
});
function initAdserver() {
if (pbjs.initAdserverSet) return;
pbjs.initAdserverSet = true;
googletag.cmd.push(function() {
pbjs.que.push(function() {
pbjs.setTargetingForGPTAsync();
googletag.pubads().refresh();
});
});
}
// in case PBJS doesn’t load
setTimeout(function() {
initAdserver();
}, FAILSAFE_TIMEOUT);
googletag.cmd.push(function() {
googletag.defineSlot(‘/19968336/header-bid-tag-0’, div_1_sizes, ‘div-1’).addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
googletag.cmd.push(function() {
googletag.defineSlot(‘/19968336/header-bid-tag-1’, div_2_sizes, ‘div-2′).addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
</script>
</head>
<body>
<h2>Basic Prebid.js Example</h2>
<h5>Div-1</h5>
<div id=’div-1′>
<script type=’text/javascript’>
googletag.cmd.push(function() {
googletag.display(‘div-1′);
});
</script>
</div>
<br>
<h5>Div-2</h5>
<div id=’div-2′>
<script type=’text/javascript’>
googletag.cmd.push(function() {
googletag.display(‘div-2’);
});
</script>
</div>
</body>
</html>
[/code]
Bạn có thể thấy, trong phần :
[code]
var adUnits = [
{
code: ‘/19968336/header-bid-tag-0’,
mediaTypes: {
banner: {
sizes: div_1_sizes
}
},
bids: [{
bidder: ‘appnexus’,
params: {
placementId: 13144370
}
}]
},
[/code]
Bạn thay bằng ID adunit mà bạn tạo trên ad manager, tên của bidder được quy định tại prebid.org, phần params là yêu cầu của từng ssp để kết nối, mỗi mạng khác nhau, thường là placementid << cái này chính là ID banner mà bạn tạo trên SSP đó (trên dashboard publisher của từng mạng sẽ cho phép bạn tạo ID quảng cáo). Những placementid này nếu bạn không đấu qua prebid thì sẽ là 1 đoạn js hay iframe nào đó (chính là code quảng cáo nhà mạng đó) để bạn dán vào vị trí cần hiển thị. Rất dễ hiểu phải không nào ?
Từng đoạn bidder là từng SSP tham gia kết nối vào, bạn có bao nhiêu ID banner của ssp khác nhau thì lắp vào là xong!
Các phần bên dưới cứ để mặc định, phần body để dán code, thì thay vì bạn paste script của một ssp tag vào thì bạn paste mã body của DFP là xong. Cơ bản nó đã được chuẩn bị ở trên head rồi, hay nói cách khác là lúc load cái <head> hệ thống đã đấu giá ngay trên trình duyệt bạn đã load.
Để các mạng cùng chạy và tránh phải việc load prebid.js quá nặng, bạn chỉ nên chọn các SSP mà bạn đang chơi với họ bằng việc tick ở đây :
Mỗi một SSP được lắp vào hay còn gọi là adapter, hệ thống sẽ render cho bạn 1 file download nhẹ hơn và chứa các script tích hợp bên trong, kéo xuống phía dưới sẽ có các tuỳ chọn như đấu qua server, qua dfp hay tích hợp google analytics,..vv..vv
Những phần này ở mức độ advance dành cho Developer có thể triển khai và kết nối.
Sự nâng cấp của Header bidding
Các SSP có các hệ thống riêng nâng cấp từ prebid lên một kiểu header bidding mới, như pubmatic thì có Open Wrap, Publift có Wrapper (họ thích gọi bằng kiểu gì cũng được) và chạy theo thuật toán advance hơn nhằm có lợi chút cho mạng quảng cáo của họ. Bạn hoàn toàn có thể tự đấu prebid theo cách trên hoặc tham gia các SSP mà họ có hệ thống prebid để được hỗ trợ. Giống như việc mình không có tài khoản publisher của các SSP thì mình sẽ tham gia 1 nhà mạng nào có hệ thống prebid, lúc đó sẽ được support thêm các mạng khác mà họ đã liên kết sẵn.
Điều gì xảy ra nếu một SSP thắng đấu giá nhưng không trả về impression quảng cáo nào ?
Điều này rất bình thường. Vì một vài lý do mà họ bid thắng cho inventory đó nhưng lại không bung ra được quảng cáo như quảng cáo prebid cho video lỗi player, quảng cáo trả chậm cho banner. Vậy để xử lý vấn đề này, bạn có thể kết hợp đặt quảng cáo backup phía sau tất cả các placementid mà bạn đã có ở các SSP, khi không có quảng cáo, hệ thống sẽ gọi ra quảng cáo backup (thường là adsense, hay direct sale phía sau).
Nếu bạn có tài khoản adx và bạn không muốn backup theo kiểu trên ?
Adsense thường là chốt chặn cuối cùng của bất kỳ hệ thống điều khiển quảng cáo hay công nghệ nào. Adsense không tham gia vào quá trình prebid nên hay được dùng cho phần backup. Nhưng Ad exchange thì có thể! Một số tài khoản Ad exchange có thể được bật Dynamic Allowcation – cho phép cạnh tranh với các SSP để hòng chiếm inventory. Nếu bạn có adx bạn hoàn toàn có thể bật 1 line item adx trong Ad manager để đấu giá cùng các SSP trong prebid – Việc này theo kinh nghiệm của mình thì Adx có tỷ lệ thắng cao nhất (90%)! Và có được giá tốt nhất khi áp lực bid của các SSP là không hề nhỏ, khiến cho adx phải đẩy giá lên cao để chiến thắng.
Ok, nếu sau khi adx thắng, mà cũng không ra được quảng cáo? Thì bạn lại backup quảng cáo cho adx thôi. Bạn sẽ tạo 1 line item type Network để backup toàn bộ phần traffic bị thừa khi không có quảng cáo. Với line item Network bạn tuỳ ý viết vào các creative quảng cáo nào bạn thích, kể cả adsense hay banner thường,…vv..vv
Chế độ này sẽ tối ưu được lượng traffic request về inventory đó – Có thể gọi nó là 1 waterfall ads (Quảng cáo đổ từ giá cao xuống thấp, đi qua các SSP, Adx, về backup).
Ưu điểm của Header Bidding
Sự minh bạch : Vì việc đấu giá xảy ra ngay trên trình duyệt, bạn có thể check debug SSP nào đã thắng trong phiên đấu giá đó bằng cách gõ ngay trên trình duyệt một đoạn query phía sau, vd: ?debug=1. Đoạn query này tuỳ theo quy định của prebid.js hay nhà mạng mà bạn sử dụng nền tảng prebid của họ, hãy hỏi họ.
Tối ưu về giá: Dĩ nhiên rồi, giá sẽ được tranh đấu và đẩy lên cao nhất mỗi khi các SSP có campaign hay phù hợp với lượng user traffic hay content, targeting của inventory đó. Adx cũng được lợi khi tham gia “trận chiến” này.
Nhiều demand : Lượng quảng cáo sẽ rất phong phú để hiển thị.
Quản lý thuận tiện: Việc gộp tất cả lại vào 1 chỗ và chạy thì hẳn sẽ tiện hơn việc sắp xếp chỗ nào chạy quảng cáo nào.
Nhược điểm của Header Bidding
Yêu cầu kỹ thuật: Việc này khá là khó khăn với những bạn không rành về kỹ thuật hay hiểu hệ thống nếu muốn đi xa hơn là lắp ghép cơ bản ở bên trên.
Độ trễ cao: Ngay cả việc xảy ra đấu giá ngay khi load script vẫn dẫn tới độ trễ xuất hiện quảng cáo khá cao khiến cho nhiều lúc user truy cập lướt qua quảng cáo đó. Vấn đề này sẽ được giải quyết nếu sử dụng server-to-server bidding (lại phải yêu cầu kỹ thuật).
Rò rỉ data khách hàng (Data leak): Việc mở inventory ra cho nhiều bên biết được để để giá khiến cho 1 số quảng cáo có thể biết được targeting, hack tài khoản.
Lời kết
Rõ ràng, nếu bỏ qua một số nhược điểm của Header Bidding, bạn cứ yên tâm là doanh thu của bạn sẽ đạt max nhất có thể khi bạn có website/app đạt mức traffic lớn (khoảng 1 triệu pageviews/ ngày với site Việt Nam hoặc 500K với site quốc tế). Header Bidding vẫn còn chỗ đứng vì những ứng dụng và nguồn lợi nhuận mà nó đem lại. Cá nhân mình nếu có site như vậy, hoàn toàn ủng hộ Header Bidding.
Còn bạn thì sao ?
*** Đọc thêm : Exchange bidding là gì ?
[…] Header bidding: Giờ site bạn lại phình to ra, có quá nhiều vị trí tốt, mà cứ để tự động như trên cũng không ổn, bạn muốn giàu hơn và đòi hỏi vị trí trên site của bạn lúc này phải làm việc cho ra tiền nhiều nhất. Bạn tìm đến chuyện cho tất cả đánh nhau, ai thắng thì được hiển thị quảng cáo cho vị trí đó. Header bidding xuất hiện như một siêu anh hùng giúp bạn đạt được mục tiêu. Mình cũng đã nói phần này ở bài trước, đọc thêm tại đây. […]