<?xml version="1.0" encoding="UTF-8"?>
<!--
  bottlebluellc.com - the eight indexable pages of the company site.

  THIS FILE AND prerender/routes.mjs HAVE TO AGREE, AND THE BUILD CHECKS IT.
  `scripts/prerender.mjs` fails the build if an indexable route is missing from
  here, if a URL here is not an indexable route, or if a RETIRED URL appears.
  An indexable page absent from the sitemap is a defect; a noindexed or deleted
  page present in it is a worse one, because it asks Google to crawl a URL and
  then answers with a noindex or a 404, which Search Console reports back as an
  error.

  THREE URLs THAT WERE IN THE PREVIOUS VERSION OF THIS FILE ARE GONE, and that
  is the one thing to read before editing it. `/projects.html`,
  `/page-services-1.html` and `/page-about-company.html` were deleted by the
  2026-09-16 content rebuild, which folded their copy onto the home page. They
  were in the live submitted sitemap and Search Console has reported crawling at
  least one of them, so they need a 301 each in the Amplify console, not a
  sitemap line. The full reasoning and the three redirect targets are in the
  RETIRED block in prerender/routes.mjs.

  /release-notes.html AND /404.html ARE DELIBERATELY ABSENT. Both carry
  `noindex, follow`. A change log is a page of short repeated phrases about
  version numbers and should not compete in search with the pages it belongs to,
  and an indexable 404 page gets indexed under whatever URL was mistyped.
  Neither is disallowed in robots.txt, because a crawler has to be allowed to
  fetch a page to read the noindex on it.

  `/products/` AND `/contact/` CARRY A TRAILING SLASH HERE ON PURPOSE. They are
  written as `dist/products/index.html`, and Amplify 301s a path with no file
  behind it to the trailing-slash form, so the slashed URL is the one that
  answers 200 and the one the canonical names.

  THE `.html` SUFFIXES ON THE REST ARE THE REAL URLS. `/terms.html` is linked
  from 43 places across the estate and `/privacy.html` from 38, in ten
  repositories including four Flutter clients and a Unity app.

  `lastmod` is the date the content of that page last meaningfully changed, not
  the date of the last deploy. Stamping every entry with the build date teaches
  Google the field is noise and it starts being ignored, which is what happened
  on blog.hiimmichael.com before it was fixed.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://bottlebluellc.com/</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/products/</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/contact/</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/aqua-botany.html</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/pocket-quant.html</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/bottle-api.html</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/terms.html</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://bottlebluellc.com/privacy.html</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
