<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: YunCheng Hong (一叶知秋)</title>
    <description>The latest articles on DEV Community by YunCheng Hong (一叶知秋) (@hongyuncheng).</description>
    <link>https://dev.to/hongyuncheng</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4064402%2F0862eb23-667b-4f70-9ad7-be3b8b858e14.png</url>
      <title>DEV Community: YunCheng Hong (一叶知秋)</title>
      <link>https://dev.to/hongyuncheng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hongyuncheng"/>
    <language>en</language>
    <item>
      <title>Building a Live Game Wiki with Astro: Architecture, SEO, and Data Reliability</title>
      <dc:creator>YunCheng Hong (一叶知秋)</dc:creator>
      <pubDate>Wed, 05 Aug 2026 14:05:08 +0000</pubDate>
      <link>https://dev.to/hongyuncheng/building-a-live-game-wiki-with-astro-architecture-seo-and-data-reliability-4mkh</link>
      <guid>https://dev.to/hongyuncheng/building-a-live-game-wiki-with-astro-architecture-seo-and-data-reliability-4mkh</guid>
      <description>&lt;p&gt;A game wiki looks simple until the game actually goes live.&lt;/p&gt;

&lt;p&gt;Codes expire. Character names change between regions. Guides mix confirmed mechanics with community guesses. Search engines keep indexing pages long after their information becomes stale.&lt;/p&gt;

&lt;p&gt;I ran into all of these problems while building &lt;a href="https://sorwiki.com/" rel="noopener noreferrer"&gt;SorWiki&lt;/a&gt;, a free knowledge base and player-tool site for the live Chinese release of &lt;em&gt;Sea of Remnants&lt;/em&gt;. The project uses Astro, but the most important lessons are less about the framework and more about how content, evidence, URLs, and interactive tools fit together.&lt;/p&gt;

&lt;p&gt;Here is the architecture that has worked best so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Model facts separately from pages
&lt;/h2&gt;

&lt;p&gt;The first mistake in many wikis is treating prose as the source of truth. If a gift code appears in three articles, updating it means finding and editing three strings.&lt;/p&gt;

&lt;p&gt;Instead, keep volatile facts in structured data and let pages render them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;confirmed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;community&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unknown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;global&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;WikiFact&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Confidence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;source&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;verifiedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fields matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;confidence&lt;/code&gt; prevents a community theory from looking like an official mechanic.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server&lt;/code&gt; stops data from one regional release leaking into another.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;verifiedAt&lt;/code&gt; makes stale information visible.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;source&lt;/code&gt; gives editors a path back to the evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A page can still be written naturally, but the facts that change most often should come from one reusable source.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Prefer a static-first architecture
&lt;/h2&gt;

&lt;p&gt;Most wiki pages are read far more often than they are edited. That makes static generation a good default.&lt;/p&gt;

&lt;p&gt;Astro works well here because it can generate fast HTML for guides and reference pages while hydrating only the parts that need client-side state.&lt;/p&gt;

&lt;p&gt;A practical split looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown or content collections for long-form guides&lt;/li&gt;
&lt;li&gt;TypeScript or JSON for codes, characters, and mechanics&lt;/li&gt;
&lt;li&gt;Astro components for reusable tables, warnings, and source notes&lt;/li&gt;
&lt;li&gt;Small client-side islands for calculators and planners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the majority of the site crawlable without shipping a large JavaScript bundle to every visitor.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Design URLs around user intent
&lt;/h2&gt;

&lt;p&gt;A wiki should not mirror an internal folder structure. It should mirror what players search for.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/codes/
/guides/
/team-builder/
/gacha-planner/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each URL has one clear purpose. The page title, heading, description, and internal links can all reinforce that purpose.&lt;/p&gt;

&lt;p&gt;Avoid generating several near-identical URLs for filters or UI states. If two pages answer the same question, consolidate them or define a canonical URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat internal links as product navigation
&lt;/h2&gt;

&lt;p&gt;Internal links are not only an SEO technique. They are how users move from a question to an action.&lt;/p&gt;

&lt;p&gt;A beginner guide might link to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a code page for current rewards,&lt;/li&gt;
&lt;li&gt;a character reference for terminology,&lt;/li&gt;
&lt;li&gt;a &lt;a href="https://sorwiki.com/team-builder/" rel="noopener noreferrer"&gt;team builder&lt;/a&gt; for testing a lineup,&lt;/li&gt;
&lt;li&gt;and a &lt;a href="https://sorwiki.com/gacha-planner/" rel="noopener noreferrer"&gt;gacha planner&lt;/a&gt; for estimating resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a useful path rather than a pile of isolated articles.&lt;/p&gt;

&lt;p&gt;Reusable related-content components make this easier to maintain. The important part is relevance: every link should help the reader complete the next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Automate freshness checks, not editorial truth
&lt;/h2&gt;

&lt;p&gt;Automation is good at finding suspicious content. It is not automatically good at deciding what is true.&lt;/p&gt;

&lt;p&gt;Useful automated checks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dates older than a chosen threshold,&lt;/li&gt;
&lt;li&gt;expired codes still marked active,&lt;/li&gt;
&lt;li&gt;broken internal or external links,&lt;/li&gt;
&lt;li&gt;pages missing titles or descriptions,&lt;/li&gt;
&lt;li&gt;duplicate canonical URLs,&lt;/li&gt;
&lt;li&gt;sitemap URLs returning non-200 responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output should become an editorial queue. A human still decides whether a mechanic changed, a translation is correct, or a community report is reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Make indexability observable
&lt;/h2&gt;

&lt;p&gt;Generating a sitemap is only the start.&lt;/p&gt;

&lt;p&gt;For every important page, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it returns &lt;code&gt;200&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;it is not blocked by &lt;code&gt;robots.txt&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;it does not contain an accidental &lt;code&gt;noindex&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;its canonical points to the intended URL,&lt;/li&gt;
&lt;li&gt;it has at least one crawlable internal link,&lt;/li&gt;
&lt;li&gt;and the rendered HTML contains the primary content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Submit the sitemap to the major webmaster tools, but also inspect what those tools report over time. “Submitted” and “indexed” are different states.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Interactive tools need shareable context
&lt;/h2&gt;

&lt;p&gt;Calculators and planners are valuable because they solve a task that prose cannot.&lt;/p&gt;

&lt;p&gt;However, a tool becomes much more useful when its state can be explained or shared. Consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readable default states,&lt;/li&gt;
&lt;li&gt;clear labels and assumptions,&lt;/li&gt;
&lt;li&gt;URLs or export text that preserve a result,&lt;/li&gt;
&lt;li&gt;nearby documentation for unfamiliar inputs,&lt;/li&gt;
&lt;li&gt;and graceful behavior without local storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to turn every page into an app. It is to add interaction where it removes real player friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Measure maintenance, not only traffic
&lt;/h2&gt;

&lt;p&gt;Page views matter, but a live wiki also needs operational metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time since last verification,&lt;/li&gt;
&lt;li&gt;number of unresolved uncertain claims,&lt;/li&gt;
&lt;li&gt;broken-link count,&lt;/li&gt;
&lt;li&gt;percentage of important pages indexed,&lt;/li&gt;
&lt;li&gt;search queries with impressions but weak answers,&lt;/li&gt;
&lt;li&gt;and tools with repeated use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These signals tell you what to fix next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;The strongest game wikis are not the ones with the most pages. They are the ones that make reliability visible, keep frequently changing facts structured, and connect reference content to useful player actions.&lt;/p&gt;

&lt;p&gt;Astro provides a fast foundation, but the durable advantage comes from the editorial system around it.&lt;/p&gt;

</description>
      <category>astro</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
