Enable Header Bidding bids on unit by calling header bidding first before the ad unit

This post was most recently updated on November 6th, 2021

Your ad unit is being called before Header Bidding could take place. Your codes need to be reviewed to make sure you call Header Bidding first, before loading your ad units.

Troubleshooting

Step 1: Fix all other errors in PubGuru Ad Inspector (PGAI) and re-test

Step 2: Review the codes deployed in your source code. Revisit the instructions provided to you by your Monetizemore Account Manager.

Step 3: If you have old codes still on the site, have them removed

Step 4: A normal ON-page implementation looks something like this:

<html>
<head>
<script type='text/javascript'>
// this is the code you'll need to dump on your page to integrate M2D header
// bidding.  when you deploy on production, remove all comments, and feel free
// to minify.  to deploy, you'll need to (1) decide whether you're using M2's mobile
// vs desktop conditional logic and if you aren't, remove the "mobile detection"
// code block below, (2) set the path to your M2D HB config as provided by your
// M2 account rep, (3) make sure you update your DFP admap (the defineSlot)
// code block
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
window.m2hb = window.m2hb || {};
m2hb.que = m2hb.que || [];
m2hb.ssl = 'https:' == document.location.protocol;
window.M2_TIMEOUT = 1000;
m2hb.maxRetries = 20;
m2hb.retries = 0;
m2hb.loadJS = function(src, async) {
  m2hb.loadedJS = m2hb.loadedJS || [];
  m2hb.loadedJS.push(src);
  (function() {
    var script = document.createElement("script");
    script.async = async || true;
    script.type = "text/javascript";
    script.src = (m2hb.ssl ? 'https:' : 'http:') + src;
    var target = document.getElementsByTagName("head")[0];
    target.insertBefore(script, target.firstChild);
  })();
};
// (1) mobile detection -- ONLY include if your admap varies mobile vs desktop
// and you want to use M2's mobile detection
// OPTIONAL
m2hb.isMobile = function() {
  if (typeof isMobileDevice == 'function') { return isMobileDevice(); }
  if (typeof isMobile == 'function') { return isMobile(); }
  if (!!window.innerWidth && (window.innerWidth <= 800)) { return true; }
  var mobile = false;
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) mobile = true;})(navigator.userAgent||navigator.vendor||window.opera);
  return mobile;
};
// end mobile detection
if (typeof m2hb.initAdserver == 'undefined') {
  m2hb.initAdserver = function() {
    if (m2hb.initAdserverSet) return;
    if (typeof m2hb.timeRemaining == 'undefined') {
      m2hb.timeRemaining = M2_TIMEOUT;
    }
    if (m2hb.timeRemaining > 0) {
      m2hb.timeRemaining -= 100;
      if (!m2hb.m2hbBidsReady) {
        setTimeout(function() {m2hb.initAdserver();}, 100);
        return;
      }
    }
    if (!googletag.pubadsReady && (m2hb.retries <= m2hb.maxRetries)) {
      m2hb.retries++;
      setTimeout(function() {m2hb.initAdserver();}, 50);
      return;
    }
    m2hb.initAdserverSet = true;
    googletag.cmd.push(function () {
      m2hb.que.push(function () {
        m2hb.setTargetingForGPTAsync();
      });
      googletag.pubads().refresh();
    });
  };
}
window.initAdserver = function() { return m2hb.initAdserver(); }
// (2) M2D HB config -- change this to pub's config path.  you can add conditional
// logic here based on mobile/desktop or traffic segments
m2hb.loadJS('//m2d.m2.ai/0-olo.js');
// end M2D HB config
googletag.cmd.push(function () {
  googletag.pubads().disableInitialLoad();
  m2hb.disabledGptInitialLoad = true;
});
m2hb.loadJS('//www.googletagservices.com/tag/js/gpt.js');
m2hb.initAdserver();
googletag.cmd.push(function() {
  // (3) DFP admap -- change pub's ad units here
  
  googletag.defineSlot('/1234567/sampleunit1', [[300,250]], 'div-gpt-ad-1442371043694-0').addService(googletag.pubads());
  googletag.defineSlot('/1234567/sampleunit2', [[300,250]], 'div-gpt-ad-1442371043694-1').addService(googletag.pubads());
  // end DFP admap
  googletag.enableServices();
});
</script>
</head>
<body>
 
  <div id='div-gpt-ad-1442371043694-0'> /1234567/sampleunit1 <br /><script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1442371043694-0'); }); </script></div>
  <div id='div-gpt-ad-1442371043694-1'> /1234567/sampleunit2 <br /><script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1442371043694-1'); }); </script></div>
</body>
</html>

Step 5: Contact a developer or reach out to support@monetizemore.com if you need further help.

 

Need more help? Send us an email at support@monetizemore.com or log in to PubGuru App and use the Chat widget for immediate support.

Stop letting RPM drops stress you out

Let our AdOps Experts do the hard work. Sign up today and unlock your revenue potential.

Maximize my Ad Revenue

It’s your turn to take the ad monetization game to the next level

  • No credit card required
  • No DNS transfer
  • Cancel any time

Get started