<?xml version="1.0" encoding="UTF-8"?>
<!--
  Two URLs, not one.

  index.html declares an hreflang pair for `/` and `/?lang=ja`, and the whole
  argument for gating on a query string rather than on IP (see useJapanese.ts)
  rests on the Japanese being separately indexable — it is the link that goes
  into a Japanese application. Listing only `/` left nothing submitting the
  other half, so the alternate depended entirely on a crawler finding the
  <link> tag and choosing to follow a query string it would otherwise fold into
  the canonical.

  The xhtml:link elements are reciprocal on purpose: Google requires every URL
  in an alternate set to point back at every other one, itself included. A
  one-directional set is treated as unconfirmed and dropped.
-->
<urlset
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
>
  <url>
    <loc>https://yangxdev.com/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://yangxdev.com/" />
    <xhtml:link rel="alternate" hreflang="ja" href="https://yangxdev.com/?lang=ja" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://yangxdev.com/" />
    <lastmod>2026-08-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://yangxdev.com/?lang=ja</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://yangxdev.com/" />
    <xhtml:link rel="alternate" hreflang="ja" href="https://yangxdev.com/?lang=ja" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://yangxdev.com/" />
    <lastmod>2026-08-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
</urlset>
