<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://chrisalberto.site/</loc>
    <lastmod>2026-06-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://chrisalberto.site/blog/</loc>
    <lastmod>2026-07-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- SITEMAP_URLS_START --><url>
      <loc>https://chrisalberto.site/blog/flyntwp-deep-dive-building-a-flexible-button-component-with-000061/</loc>
      <lastmod>2026-07-27T17:02:51Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/the-case-of-the-exploded-hero-section-why-guardrails-beat-000060/</loc>
      <lastmod>2026-07-27T05:01:18Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/designing-secure-custom-rest-endpoints-in-wordpress-for-000059/</loc>
      <lastmod>2026-07-27T03:53:03Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/sage-view-composers-keeping-your-blade-templates-000058/</loc>
      <lastmod>2026-07-26T17:29:16Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/flyntwp-s-secret-sauce-composing-reusable-twig-button-000057/</loc>
      <lastmod>2026-07-26T17:08:29Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/when-freedom-becomes-chaos-guarding-design-with-custom-000056/</loc>
      <lastmod>2026-07-26T05:00:32Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-a-custom-wordpress-rest-endpoint-for-tailored-data-000055/</loc>
      <lastmod>2026-07-26T03:18:16Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/taming-your-wordpress-data-with-sage-view-composers-000054/</loc>
      <lastmod>2026-07-25T17:11:29Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/crafting-reusable-image-modules-in-flyntwp-with-twig-and-acf-000053/</loc>
      <lastmod>2026-07-25T17:01:27Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/beyond-drag-and-drop-guardrails-for-sanity-in-wordpress-000052/</loc>
      <lastmod>2026-07-25T05:41:40Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/automated-wordpress-plugin-deployment-with-github-actions-000051/</loc>
      <lastmod>2026-07-25T03:02:38Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/bringing-order-to-chaos-how-sage-view-composers-keep-your-000050/</loc>
      <lastmod>2026-07-24T17:10:39Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/crafting-a-flexible-call-to-action-with-flyntwp-components-000049/</loc>
      <lastmod>2026-07-24T17:00:45Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/guardrails-not-gridlock-why-custom-themes-prevent-design-000044/</loc>
      <lastmod>2026-07-24T05:12:37Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/crafting-secure-optimized-custom-rest-endpoints-in-wordpress-000047/</loc>
      <lastmod>2026-07-24T03:01:11Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/exposing-curated-data-building-authenticated-custom-rest-000043/</loc>
      <lastmod>2026-07-24T03:00:39Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/composing-clarity-how-sage-view-composers-keep-your-data-000046/</loc>
      <lastmod>2026-07-23T17:11:00Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/sage-view-composers-taming-your-custom-post-type-data-for-000042/</loc>
      <lastmod>2026-07-23T17:10:35Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/crafting-reusable-content-blocks-acf-pro-flexible-content-000045/</loc>
      <lastmod>2026-07-23T17:00:44Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/crafting-reusable-headers-with-flyntwp-partials-000041/</loc>
      <lastmod>2026-07-22T18:00:56Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/the-performance-edge-ditching-page-builders-for-custom-000040/</loc>
      <lastmod>2026-07-22T17:59:52Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/why-every-custom-post-type-i-ship-now-comes-with-a-000038/</loc>
      <lastmod>2026-07-22T17:59:27Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/the-pest-test-that-saved-a-client-s-checkout-flow-000034/</loc>
      <lastmod>2026-07-22T17:43:34Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/automating-wordpress-deploys-my-journey-from-ftp-to-github-000033/</loc>
      <lastmod>2026-07-22T17:43:01Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/streamlining-wordpress-data-with-sage-view-composers-a-real-000037/</loc>
      <lastmod>2026-07-22T08:10:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/my-flyntwp-pattern-for-truly-reusable-cta-components-000036/</loc>
      <lastmod>2026-07-22T08:00:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/locking-down-a-custom-rest-endpoint-the-auth-mistake-i-made-000039/</loc>
      <lastmod>2026-07-21T18:10:35Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/sculpting-maintainable-wordpress-why-sage-is-my-go-to-for-000032/</loc>
      <lastmod>2026-07-21T08:10:20Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/taming-wordpress-bloat-why-i-choose-flyntwp-for-lean-000031/</loc>
      <lastmod>2026-07-21T08:00:10Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/beyond-drag-and-drop-why-i-choose-custom-code-for-wordpress-000030/</loc>
      <lastmod>2026-07-21T05:00:31Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-modern-wordpress-why-i-chose-sage-over-page-000027/</loc>
      <lastmod>2026-07-20T08:10:23Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/flyntwp-my-go-to-for-building-lightning-fast-bloat-free-000026/</loc>
      <lastmod>2026-07-20T08:01:21Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/ditch-the-drag-and-drop-why-custom-wordpress-themes-reign-000025/</loc>
      <lastmod>2026-07-20T05:01:18Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/decoupling-wordpress-building-a-headless-frontend-with-next-000024/</loc>
      <lastmod>2026-07-20T04:56:21Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/reclaim-your-wordpress-why-custom-code-obliterates-bloated-000029/</loc>
      <lastmod>2026-07-19T17:44:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/ditch-the-bloat-why-vanilla-wordpress-custom-blocks-and-000028/</loc>
      <lastmod>2026-07-19T17:23:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/architecting-headless-wordpress-next-js-rest-and-automated-000020/</loc>
      <lastmod>2026-07-18T17:00:46Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/ditching-divi-why-i-code-my-wordpress-themes-from-scratch-000021/</loc>
      <lastmod>2026-07-18T16:40:46Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/tired-of-bloat-why-flyntwp-is-my-go-to-for-lean-fast-000022/</loc>
      <lastmod>2026-07-18T16:30:46Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-better-wordpress-how-sage-unlocks-clean-000023/</loc>
      <lastmod>2026-07-18T16:20:46Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-wordpress-themes-the-right-way-why-sage-cured-my-000019/</loc>
      <lastmod>2026-07-17T08:43:47Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/ditching-the-drag-and-drop-my-journey-to-faster-wordpress-000018/</loc>
      <lastmod>2026-07-17T08:40:47Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-beyond-the-builder-why-custom-wordpress-themes-win-000017/</loc>
      <lastmod>2026-07-17T07:15:26Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/from-bloatware-to-blade-why-sage-is-my-wordpress-000015/</loc>
      <lastmod>2026-07-16T17:34:40Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/building-better-why-i-chose-flyntwp-for-lightning-fast-000014/</loc>
      <lastmod>2026-07-16T17:26:40Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/decoupling-wordpress-building-a-headless-backend-with-ci-cd-000012/</loc>
      <lastmod>2026-07-16T06:52:08Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/from-bloat-to-brilliance-unpacking-the-power-of-custom-000013/</loc>
      <lastmod>2026-07-16T06:41:08Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/why-i-ditched-page-builders-for-hand-coded-wordpress-the-000011/</loc>
      <lastmod>2026-07-15T06:58:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/beyond-the-block-editor-architecting-headless-wordpress-000010/</loc>
      <lastmod>2026-07-15T06:38:50Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/that-lighthouse-score-and-the-headless-rabbit-hole-i-fell-000008/</loc>
      <lastmod>2026-07-14T11:41:22Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/that-time-i-rebuilt-a-site-after-its-page-builder-imploded-000009/</loc>
      <lastmod>2026-07-14T08:26:27Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/why-i-finally-went-headless-on-my-last-wordpress-project-000007/</loc>
      <lastmod>2026-07-13T17:45:03Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/why-your-wordpress-site-is-slow-the-hidden-cost-of-all-in-eb422c/</loc>
      <lastmod>2026-07-10T15:46:24.524Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><url>
      <loc>https://chrisalberto.site/blog/just-install-a-plugin-for-that-my-take-on-when-to-code-it-624b0f/</loc>
      <lastmod>2026-07-10T14:32:30.005Z</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url><!-- SITEMAP_URLS_END -->
  <!--
    Each publish prepends one url immediately after SITEMAP_URLS_START
    above, format:
    <url>
      <loc>{{canonicalUrl}}</loc>
      <lastmod>{{isoDate}}</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>

    This comment must stay OUTSIDE the SITEMAP_URLS_START/END pair, even
    though this file's insertion function doesn't currently parse that
    region (unlike feed.xml's) — kept consistent so both marker-based XML
    files follow the same, less fragile convention.

    Note: the static entries above use date-only lastmod values while
    {{isoDate}} here is a full ISO timestamp; both date-only and full-ISO
    lastmod are valid per the sitemaps.org spec, so this format difference
    is intentional, not a bug.
  -->
</urlset>
