← Back to Game
A chronological record of how Anime Semantle was designed, what broke,
and how it got fixed, newest first. This includes the missteps and
failed attempts, not just the parts that went smoothly. New entries
get added to the top of this list as changes land. For a retrospective
on the AdSense review saga specifically, see
this write-up.
Strategy guide, answer statistics, and solve-rate tracking
Published a strategy guide built from real similarity data — reference
tables and a full walkthrough using measured values like "when the
answer was One Piece, Naruto scored 0.552 and Haikyu!! scored 0.000."
Also added an answer statistics page aggregating the daily answer
archive (genre distribution, anime/character ratio), regenerated
automatically every day. Finally, deployed a Cloudflare Worker + D1
API that counts daily players, solvers, and give-ups — once enough
data accumulates, per-day solve rates will be published.
Paying down SEO tech debt — redirects and the sitemap
The third review came back with the same rejection, so this time the
whole site got audited from a crawler's point of view. Two problems
surfaced. First, internal links and canonicals pointed at .html URLs
that the host 307-redirects, causing duplicate indexing and canonical
errors — all internal URLs across 50 files were unified to the
extensionless form. Second, Google hadn't re-read the sitemap in three
weeks because an old version contained an invalid changefreq value
(quarterly). A regex bug in the daily automation that silently stopped
sitemap updates was found and fixed too, and the sitemap was
resubmitted in Search Console along with indexing requests for the
new pages.
Contact email address changed
Changed the contact inbox to hograywm@gmail.com. Updated the email on
the main page footer note, the contact page, and the privacy policy
page across both KO and EN.
robots.txt cleanup, a contact page, deploy config fix
Removed a robots.txt Disallow rule that was conflicting with the
noindex meta tags, letting search engines actually read them. Added a
standalone contact page, and fixed a Cloudflare Workers deploy failure
caused by a missing wrangler.jsonc config file.
A fix that made things worse, then a change of direction
On top of the wordlist page, 36 genre pages were added — and the
second review rejected the site for the same "low-value content"
reason. The actual cause turned out to be that this had scaled up a
pattern of repackaging MyAnimeList data 34x over. Those pages were set
to noindex to remove them from search, and a daily-updating past-answers
archive unique to this site was built instead. The about page was also
updated with the actual measured data behind the similarity weighting
choice. A redirect-loop SEO issue on the about/privacy/archive pages
was discovered and fixed during this same investigation.
"Low-value content" rejection, and a list page in response
AdSense rejected the site for "content with little value." Assuming
the standalone game itself was too thin, a full anime/character
wordlist page was built in response. In hindsight, this specific fix
set up the next rejection.
Monthly auto-refresh + Discord notifications
Locked in the monthly data refresh schedule and added a Discord
notification summarizing new/removed titles after each update. The
first version had a bug that misflagged existing entries as new,
fixed the next day.
The fight against CLS (layout shift)
Spent several days tracking down layout shift during page load —
locking the scrollbar, reordering the results section, and chasing
down the remaining sub-pixel shifts. The similarity calculation logic
was also redesigned from scratch around this time, and the "70%
structure + 30% synopsis" weighting used today traces back to this
rework.
Building the auto-update pipeline
Set up GitHub Actions to automate data collection, translation, and
similarity computation for the first time. The pipeline built here is
still the basis for the monthly automated data refresh running today.
Expanding the answer pool and splitting into chunks
The number of precomputed neighbors stored per item grew in stages from
100 to 3,000. As the data grew, we hit Cloudflare Pages' 25MB per-file
limit, so the similarity JSON was split into 5 separate files. The
English version and character translations were also added around this
time.
First deploy
Anime Semantle went live. The initial setup included the meta tags and
ads.txt required for ad review, along with basic SEO tags.