HTML5 game publishing
Build Category and Tag Pages From the PlayKovo Feed
Group games by the categories and tags fields, set a minimum size so you do not publish thin pages, map slugs to readable names and keep pages in step with the feed.
Every game in the feed carries two lists: categories and tags. They are the raw material for a navigation that helps visitors find games without scrolling a flat list. This post shows how to turn them into category and tag pages, how to avoid empty or tiny pages and how to keep them in step with the feed.
Categories and tags: what the feed says
The field reference describes categories as an array of category slugs and tags as an array of tag slugs. A game can have several of each. A game that is both a runner and a hypercasual game shows up in both lists. Use categories as the main shelves and tags as finer filters.
At the time of writing, the embeddable part of the catalog is led by arcade, casual, hypercasual and action, followed by io, puzzle and smaller groups such as shooting, strategy, adventure, merge, stickman, sports, racing and simulation. These counts change as games are added, so build from the feed instead of hard-coding the list.
Build the groups from the feed
const byCategory = new Map();
for (const game of games) {
for (const slug of game.categories ?? []) {
if (!byCategory.has(slug)) byCategory.set(slug, []);
byCategory.get(slug).push(game);
}
}
// categories with at least 6 games get their own page
const pages = [...byCategory].filter(([, list]) => list.length >= 6);
The threshold is yours to choose. A category page with two games is a weak page. Either merge the small groups into an "Other" page or leave them out.
Names for the visitor
The feed gives slugs, such as hypercasual or io. The slug is a key, not a heading. Make a small table that maps each slug you use to a clear name and a one-sentence description of your own: "Quick games you can learn in seconds". Fall back to the slug (with hyphens turned into spaces) if a new category appears that you have not named yet, so the page does not break.
Page design
- One heading naming the category and a short introduction in your own words.
- A grid of cards, using the thumbnail and the short description; see building your own game grid.
- Filters for device and orientation if the group is large; see the filtering post.
- A link to related categories, so visitors who finish a group can move on.
Tags: use sparingly
Tags are more numerous and more specific, and many appear on only one or two games. Making a page for every tag creates a lot of thin pages. A better approach is to choose a few tags that match your audience, such as "2-player" or "relaxing" if those suit your visitors, and give them pages. Use the rest only as filters inside category pages.
Keep pages in step with the feed
- Rebuild the groups every time you refresh the feed (not more often than every five minutes; see the caching rule).
- Remove games that left the feed from every group.
- If a category loses all its games, remove the page and redirect it to a closely related page.
- Check that your sitemap lists only pages that exist.
Do not mislead with the names
Categories describe the games; they do not make them yours. Calling a page "Our racing games" suggests ownership, which the terms forbid. "Racing games" or "Racing games from PlayKovo" is accurate. For more on wording, see describing games without claiming them.
Browse the groups yourself in the publisher catalog.


