HTML5 game publishing

Where to Place Ads in an HTML5 Game Without Losing Players

Good and bad moments for interstitials, rewarded ads that only pay out in the callback, error handling that never blocks the game, and a failure-path test list.

PlayKovo Team3 min read
Games currently available on PlayKovo. Open a title to see its current listing.

Ads are part of how free browser games pay for themselves, but how you place them decides whether players stay for another round or close the tab. Most of the damage comes from a handful of avoidable mistakes. This guide covers where to call ads with the PlayKovo SDK and what to do when an ad does not show.

Two ad types, two different jobs

Interstitials are full-screen ads you trigger yourself. The player did not ask for them, so they need a natural pause. Rewarded ads are opt-in: the player taps a button and watches an ad in exchange for something. Players tend to accept rewarded ads because they chose them.

Good moments for an interstitial

  • After a level is completed or failed, before the next one loads.
  • When the player returns to the main menu.
  • Between rounds in a match-based game.
await window.PlayKovoSDK.showInterstitial({
  placement: "level_complete",
  onClose: () => openNextLevel(),
  onError: () => openNextLevel(),
});

Notice that onError does exactly the same as onClose. That is the most important line in the snippet. An ad can fail to load, be blocked, or time out. If your game only continues from onClose, the player is stuck on a black screen and blames your game.

Bad moments for an interstitial

  • At game start. The player has not seen the game yet. Many leave right there.
  • Mid-action. An ad that interrupts a jump or a fight feels like a bug, and it can cost the player a run they were winning.
  • After every single action. If a level takes 20 seconds, an ad after each one is too much. Count levels or time and show one every few rounds instead.
  • Right after a rewarded ad. Give the player a break after they just watched one.

A simple cooldown is enough:

let lastAdAt = 0;
function maybeShowAd(next) {
  const now = Date.now();
  if (now - lastAdAt < 90000) { next(); return; } // 90 s minimum gap
  lastAdAt = now;
  window.PlayKovoSDK.showInterstitial({
    placement: "level_complete",
    onClose: next,
    onError: next,
  });
}

Rewarded ads: only reward in the callback

await window.PlayKovoSDK.showRewarded({
  placement: "continue_run",
  onReward: () => grantContinue(),
  onError: () => showRewardUnavailable(),
});

Give the reward inside onReward and nowhere else. Never grant it when the button is clicked, and do not add a fallback that hands out the reward when the ad fails. Rewarding on click makes the ad pointless; rewarding on failure teaches players to block ads. On onError, show a short message such as "No video available right now, try again later" and leave the game state unchanged.

Where rewarded buttons work well

  • A "continue" offer after a failed run, shown once per attempt.
  • Double the coins collected in a level.
  • A free hint in a puzzle game.

Keep the offer optional and keep the game fully playable without it. A rewarded ad that is the only way to progress is a paywall in disguise.

Test the failure paths, not just the happy path

When you run your game from localhost, the SDK shows a mock overlay so you can check your flow. Use it to answer these questions:

  1. Does the game continue when the ad errors?
  2. Does the game continue if the player closes the ad early?
  3. Is the audio restored afterwards?
  4. Can the player trigger two ads at once by tapping a button twice? Disable the button while an ad is open.

One honest note: integrating the SDK shows real ads once your game is live, but PlayKovo does not pay developers per view, click or install today. The revenue share program is still being built, and the developer docs say so. Place ads as if the player experience is the product, because it is what decides whether your game gets played.

Before you submit, run through how PlayKovo reviews HTML5 game submissions so you know what the review looks at.

We use optional cookies for site analytics and site advertising. You can change your choice later. Privacy policy.