Date: 2026-07-29 · Rebuild: v2.0 (Astro static multi-page + Solid islands)
Before: single-page Vite/Solid SPA. One URL, empty <body> (all content client-rendered), FAQ existed only in JSON-LD (violates Google's "schema must match visible content" guideline), no pages for any non-brand keyword.
After: 12 statically-rendered pages (full HTML, no JS required for content), each targeting a researched keyword cluster, with interactive tools hydrated as islands. Built on Astro 5 + @astrojs/solid-js + @astrojs/sitemap; deployed unchanged on Cloudflare Pages (pnpm build → dist/).
| Page | Primary targets | Volume / KD |
|---|---|---|
/ |
emoji maker · custom emoji maker · make your own emoji | 27,100/69 · 880/62 · 2,400/77 |
/emoji-combiner/ |
emoji combiner · emojis combined · emoji mixer | 9,900/53 · 22,200/62 · 6,600/76 |
/emoji-kitchen/ |
emoji kitchen (informational) · how to use/get emoji kitchen · emoji kitchen alternative | 368,000/50 head + long tail |
/random-emoji-generator/ |
random emoji generator · emoji random generator | 2,900/9 · 590/15 |
/slack-emoji-maker/ |
slack emoji maker · slack custom emoji · how to make slack emojis | 720/20 · 880/35 · 480/43 |
/discord-emoji-maker/ |
discord emoji maker · custom discord emojis | 1,300/46 · 1,600/44 |
/twitch-emote-maker/ |
twitch emote maker · emote maker (for twitch) · how to make twitch emotes | 1,300/19 · 720/14 · 1,600/39 |
/genmoji-online/ |
genmoji online · genmoji android · what is genmoji | 140/31 · 170/21 · 880/55 |
/genmoji-prompts/ |
genmoji ideas · genmoji prompts · best/funny genmoji prompts | 720/22 · 260/25 · 480/33 · 320/29 |
/emoji-combinations/ |
aesthetic/cute/funny/christmas/halloween emoji combinations | ~1,000/25-27 each |
/guides/how-to-make-custom-emojis/ |
how to make custom emojis · can you make your own emoji | 1,900/52 · 260/65 |
/404 |
— (noindex) | — |
Differentiators baked into copy & product (per competitive research): free + no sign-up + no watermark (every ranking competitor gates something), SVG export (no ranking competitor advertises it), platform-exact export sizes (128 Slack/Discord, 112/56/28 Twitch one-click trio).
Validated on every built page — current result: 12 pages, 0 errors, 0 warnings.
- Exactly one
<h1>, keyword-bearing, unique per page <title>25–65 chars, unique; meta description 70–165 chars, unique- Self-referencing canonical (trailing-slash consistent, matches sitemap URLs)
og:title/description/image/url,twitter:cardon every page- Valid JSON-LD on every indexable page:
Organization,WebApplication(tools),Article(content),HowTo(upload guides),BreadcrumbList,FAQPage - FAQ schema questions must appear verbatim in visible
<details>markup (checked programmatically; schema answers stripped of HTML) - All
<img>havealt; internal links verified against built output (no 404s) lang="en", viewport, robots meta (index,follow/noindexon 404)- Sitemap: all indexable pages present, noindex pages absent; robots.txt →
/sitemap-index.xml
- Rendering: every page is full static HTML (view-source shows all content). Tools hydrate as islands (
client:loadabove the fold,client:visiblebelow). - Performance: no webfonts, system font stack; single small CSS; islands are the only JS.
_headersadds immutable caching for/_astro/*and security headers (nosniff, SAMEORIGIN, referrer policy). - Internal linking: header nav (6 items), footer mesh (4 columns, every page reachable ≤1 click), contextual cross-links + "Related tools" section per page, visible breadcrumbs on subpages matching
BreadcrumbList. - Analytics: GA4 loads only when
PUBLIC_GTAG_IDis set to a real ID (env/wrangler.toml). - Assets: Fluent Emoji SVGs bundled and hashed by Astro's pipeline; MIT attribution in footer +
isBasedOnschema.
- Maker island: parts load, randomize, canvas compositing, multi-size PNG + SVG export controls
- Combiner island: pair pick, overlay render (🐱+🔥), presets, sliders, PNG download button
- Random island, copy-to-clipboard combos, dark/light toggle (no FOUC), no console errors
- Deploy, then submit
sitemap-index.xmlin Google Search Console + Bing Webmaster Tools. - Per-page OG images (currently one shared banner) — biggest remaining social/CTR lever.
/teams-emoji-maker/page (teams custom emoji ≈1,000/mo, KD ≈30, unserved) +/emoji-combinations/<category>/split-outs as sections grow.- Animated/GIF export (unlocks "animated emoji" cluster, 45+ autocomplete variants).
- Monitor GSC for Emoji Kitchen queries; expand
/emoji-kitchen/with a combo-browsing feature if impressions confirm demand. - Refresh
datePublished/dateModifiedwhen content changes; keep an eye on iOS/Unicode September cycles and World Emoji Day (Jul 17) for content pushes.