<!DOCTYPE html><html lang="en" class="h-full"> <head><!-- Basic meta --><meta charset="UTF-8"><meta name="description" content="The page you requested could not be found."><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- Open Graph --><meta property="og:title" content="404 | Page not found"><meta property="og:description" content="The page you requested could not be found."><meta property="og:type" content="website"><meta property="og:url" content="https://ryansbakingblog.com/404/"><meta property="og:site_name" content="Baking Blog"><meta property="og:image" content="https://mfgqkpukzigjcouxakjh.supabase.co/storage/v1/object/public/baking-blog/images/site-assets/baking-blog-logo.webp"><meta property="og:image:alt" content="404 | Page not found"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="404 | Page not found"><meta name="twitter:description" content="The page you requested could not be found."><meta name="twitter:image" content="https://mfgqkpukzigjcouxakjh.supabase.co/storage/v1/object/public/baking-blog/images/site-assets/baking-blog-logo.webp"><meta name="twitter:image:alt" content="404 | Page not found"><!-- Other --><meta name="p:domain_verify" content="01dd16f191d295e3f470d10d7fd399d7"> <link rel="icon" href="/favicon.ico" sizes="any"> <script src="https://analytics.ahrefs.com/analytics.js" data-key="CVM7Xk4cXBZl3dBdZEdnLw" async></script> <title>404 | Page not found</title><!-- Structured Data (JSON-LD) --><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://ryansbakingblog.com/","url":"https://ryansbakingblog.com/","name":"Baking Blog","description":"The page you requested could not be found.","inLanguage":"en"}</script><!-- Theme init (prevents FOUC) --><script>;(() => {
  const theme =
    localStorage.getItem("theme") ??
    (matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");

  document.documentElement.classList.toggle("dark", theme === "dark");
})();</script><!-- Hreflang / Canonical --><link rel="canonical" href="https://ryansbakingblog.com/404/"><link rel="stylesheet" href="/_astro/_slug_.DpPscL9q.css"></head> <body class="bg-white text-gray-900 dark:bg-slate-900 dark:text-slate-200 transition-colors duration-300 min-h-full">  <main class="max-w-[1100px] mx-auto px-4">     <link rel="alternate" hreflang="en" href="https://ryansbakingblog.com/404"><link rel="alternate" hreflang="x-default" href="https://ryansbakingblog.com/404"> <div class="min-h-screen flex items-center justify-center px-4" style="min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 1rem;"> <div class="text-center max-w-2xl" style="text-align: center; max-width: 42rem;"> <!-- Logo --> <div class="mb-8" style="margin-bottom: 2rem;"> <a href="/"> <img src="https://mfgqkpukzigjcouxakjh.supabase.co/storage/v1/object/public/baking-blog/images/site-assets/baking-blog-logo.webp" alt="Baking Blog" class="mx-auto h-60 w-auto" style="margin: 0 auto; height: 15rem; width: auto;" onerror="this.style.display='none'"> </a> </div> <!-- 404 Number --> <h1 class="text-9xl font-bold text-gray-300 dark:text-gray-700 mb-4" style="font-size: 8rem; font-weight: bold; color: #d1d5db; margin-bottom: 1rem;">
404
</h1> <!-- Title --> <h2 id="errorTitle" class="text-3xl font-bold text-gray-900 dark:text-slate-100 mb-4" style="font-size: 1.875rem; font-weight: bold; color: #111827; margin-bottom: 1rem;"> Page not found </h2> <!-- Message --> <p id="errorMessage" class="text-xl text-gray-600 dark:text-gray-400 mb-2" style="font-size: 1.25rem; color: #4b5563; margin-bottom: 0.5rem;"> The page you requested could not be found. </p> <!-- Suggestion --> <p id="errorSuggestion" class="text-gray-500 dark:text-gray-500 mb-8" style="color: #6b7280; margin-bottom: 2rem;"> The page may have moved or been removed. Return to the homepage to continue browsing. </p> <!-- Back to Home Button --> <a id="backButton" href="/" class="inline-flex items-center px-6 py-3 text-base font-medium text-white bg-blue-600 hover:bg-blue-700 dark:bg-blue-700 dark:hover:bg-blue-600 rounded-md transition-colors" style="display: inline-flex; align-items: center; padding: 0.75rem 1.5rem; font-size: 1rem; font-weight: 500; color: white; background-color: #2563eb; border-radius: 0.375rem; text-decoration: none;"> <svg class="w-5 h-5 mr-2" style="width: 1.25rem; height: 1.25rem; margin-right: 0.5rem;" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path> </svg> <span id="backButtonText">Back to Home</span> </a> </div> </div>   </main> <!-- Cookie Consent --> <script>(function(){const GOOGLE_ANALYTICS_ID = "G-ZTP3P6J0EP";

  window.__GOOGLE_ANALYTICS_ID__ = GOOGLE_ANALYTICS_ID;
})();</script> <script>(function(){const COOKIE_ANALYTICS_BASE = "https://mfgqkpukzigjcouxakjh.supabase.co/functions/v1";

  window.__COOKIE_ANALYTICS_BASE__ = COOKIE_ANALYTICS_BASE;
})();</script> <script>(function(){const COOKIE_CONSENT_MODE = "notice";
const REQUIRE_ANALYTICS_CONSENT = false;
const REQUIRE_EXTERNAL_CONSENT = false;

  window.__COOKIE_CONSENT_MODE__ = COOKIE_CONSENT_MODE;
  window.__REQUIRE_ANALYTICS_CONSENT__ = REQUIRE_ANALYTICS_CONSENT;
  window.__REQUIRE_EXTERNAL_CONSENT__ = REQUIRE_EXTERNAL_CONSENT;
})();</script> <!-- Cookie Consent Banner --><div id="cookie-banner" class="fixed bottom-0 left-0 right-0 bg-white dark:bg-slate-800 border-t-2 border-gray-200 dark:border-gray-700 shadow-xl z-50 hidden"> <div class="max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8"> <div class="flex flex-col md:flex-row items-start md:items-center justify-between gap-4"> <p class="flex-1 text-sm text-gray-700 dark:text-gray-300"> We use cookies to improve your experience and analyze site traffic. By continuing to use this site, you accept our use of cookies. Learn more in our  <a href="/privacy-policy" class="font-medium text-blue-600 dark:text-blue-400 hover:underline cookie-privacy-link">Privacy Policy</a>.
</p> <button id="accept-all-cookies" class="px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-600 rounded-md transition-colors cookie-accept">
Accept
</button> </div> </div> </div> <!-- Cookie Preferences Modal -->  <script>(function(){const LANG = "en";

  window.__INITCOOKIECONSENT__ = { configUrl: "/data/site/site.config.json", lang: LANG };
})();</script> <script type="module" src="/scripts/cookie-consent.js?v=d66648aae7"></script> <!-- Theme toggle --> <script type="module" src="/scripts/theme-toggle.js?v=ad8d47e251"></script> <script>(function(){const ENABLE_KEEP_ALIVE = false;
const KEEP_ALIVE_BASE = "https://mfgqkpukzigjcouxakjh.supabase.co/functions/v1";
const ANALYTICS_BASE = "https://mfgqkpukzigjcouxakjh.supabase.co/functions/v1";

  window.__INITBLOGLAYOUT__ = {
    enableKeepAlive: ENABLE_KEEP_ALIVE,
    keepAliveBase: KEEP_ALIVE_BASE,
    analyticsBase: ANALYTICS_BASE
  };
})();</script> <script>(function(){const GYG_ENABLED = false;
const GYG_PARTNER_ID = "H8IP0OO";

  window.__GYG_ENABLED__ = GYG_ENABLED;
  window.__GYG_PARTNER_ID__ = GYG_PARTNER_ID;
})();</script> <script>(function(){const SITE_DATE_LOCALE = "en-US";

  window.__SITE_DATE_LOCALE__ = SITE_DATE_LOCALE;
})();</script> <script>(function(){const INLINE_ADS_CONFIG = {"enabled":false,"site":"baking-blog","language":"en","edgeBase":"https://mfgqkpukzigjcouxakjh.supabase.co/functions/v1","adsenseClient":"","fallbackAdsenseSlots":{"recipe-top":"8893925532","recipe-after-introduction":"3726600006","recipe-after-why-it-works":"9465577070","recipe-after-troubleshooting":"6839413735","hub-top":"","hub-mid":"","hub-lower":"","ingredient-top":"","ingredient-mid":"","excellence-top":"","excellence-mid":"","excellence-lower":"","article-top":"","article-mid":""}};

  window.__INLINE_ADS__ = INLINE_ADS_CONFIG;
})();</script> <script>
  (function () {
    const globalWindow = window;
    const config = globalWindow.__INLINE_ADS__;
    if (!config?.enabled) return;

    let assignmentsPromise = null;

    function getCurrentDeviceScope() {
      return window.matchMedia("(max-width: 1023px)").matches ? "mobile" : "desktop";
    }

    function injectExecutableHtml(target, html) {
      const template = document.createElement("template");
      template.innerHTML = html;
      const fragment = template.content.cloneNode(true);
      const scripts = Array.from(fragment.querySelectorAll("script"));

      scripts.forEach((script) => {
        const replacement = document.createElement("script");
        Array.from(script.attributes).forEach((attribute) => {
          replacement.setAttribute(attribute.name, attribute.value);
        });
        replacement.textContent = script.textContent;
        script.replaceWith(replacement);
      });

      target.appendChild(fragment);
    }

    async function fetchAssignments() {
      if (assignmentsPromise) return assignmentsPromise;
      assignmentsPromise = (async () => {
        try {
          const url = new URL(`${String(config.edgeBase || "").replace(/\/$/, "")}/ad-slots`);
          url.searchParams.set("action", "publicAssignments");
          url.searchParams.set("site", String(config.site || "").trim());
          const response = await fetch(url.toString(), { cache: "no-store" });
          const payload = await response.json().catch(() => ({}));
          if (!response.ok || payload?.ok === false) return [];
          return Array.isArray(payload?.data?.assignments) ? payload.data.assignments : [];
        } catch {
          return [];
        }
      })();
      return assignmentsPromise;
    }

    function resolveAssignment(slotKey, assignments) {
      const normalizedSlotKey = String(slotKey || "").trim();
      if (!normalizedSlotKey) return null;

      const currentLanguage = String(config.language || "").trim().toLowerCase();
      const currentDevice = getCurrentDeviceScope();

      const matched = assignments
        .filter((entry) => String(entry?.placementKey || "").trim() === normalizedSlotKey)
        .filter((entry) => {
          const deviceScope = String(entry?.deviceScope || "all").trim().toLowerCase();
          const languageCode = String(entry?.languageCode || "").trim().toLowerCase();
          const deviceMatches = deviceScope === "all" || deviceScope === currentDevice;
          const languageMatches = !languageCode || languageCode === currentLanguage;
          return deviceMatches && languageMatches;
        })
        .sort((left, right) => {
          const leftLanguage = String(left.languageCode || "").trim().toLowerCase();
          const rightLanguage = String(right.languageCode || "").trim().toLowerCase();
          const leftDevice = String(left.deviceScope || "all").trim().toLowerCase();
          const rightDevice = String(right.deviceScope || "all").trim().toLowerCase();

          const leftLanguageScore = leftLanguage === currentLanguage ? 1 : 0;
          const rightLanguageScore = rightLanguage === currentLanguage ? 1 : 0;
          if (leftLanguageScore !== rightLanguageScore) {
            return rightLanguageScore - leftLanguageScore;
          }

          const leftDeviceScore = leftDevice === currentDevice ? 1 : 0;
          const rightDeviceScore = rightDevice === currentDevice ? 1 : 0;
          if (leftDeviceScore !== rightDeviceScore) {
            return rightDeviceScore - leftDeviceScore;
          }

          const leftUpdated = left.updatedAt ? new Date(left.updatedAt).getTime() : 0;
          const rightUpdated = right.updatedAt ? new Date(right.updatedAt).getTime() : 0;
          return rightUpdated - leftUpdated;
        });

      if (matched[0]) return matched[0];

      const fallbackSlot = String(config.fallbackAdsenseSlots?.[normalizedSlotKey] || "").trim();
      const adsenseClient = String(config.adsenseClient || "").trim();
      if (!fallbackSlot || !adsenseClient) return null;

      return {
        placementKey: normalizedSlotKey,
        provider: "adsense",
        deviceScope: "all",
        languageCode: "",
        adsenseSlot: fallbackSlot,
        adsenseFormat: "auto",
        adsenseFullWidthResponsive: true,
      };
    }

    function renderAssignment(marker, assignment) {
      marker.innerHTML = "";

      if (assignment.provider === "adsense") {
        const adsenseClient = String(config.adsenseClient || "").trim();
        const adsenseSlot = String(assignment.adsenseSlot || "").trim();
        if (!adsenseClient || !adsenseSlot) return false;

        const ins = document.createElement("ins");
        ins.className = "adsbygoogle";
        ins.style.display = "block";
        ins.setAttribute("data-ad-client", adsenseClient);
        ins.setAttribute("data-ad-slot", adsenseSlot);
        ins.setAttribute("data-ad-format", String(assignment.adsenseFormat || "auto") || "auto");
        ins.setAttribute(
          "data-full-width-responsive",
          assignment.adsenseFullWidthResponsive === false ? "false" : "true",
        );
        marker.appendChild(ins);
        marker.classList.add("odulp-inline-ad-slot--ready");

        try {
          (globalWindow.adsbygoogle = globalWindow.adsbygoogle || []).push({});
        } catch {
          // Ignore AdSense push failures.
        }
        return true;
      }

      if (assignment.provider === "custom_html") {
        if (!assignment.htmlSnippet) return false;
        injectExecutableHtml(marker, assignment.htmlSnippet);
        marker.classList.add("odulp-inline-ad-slot--ready");
        return true;
      }

      if (assignment.provider === "image") {
        if (!assignment.imageUrl) return false;
        const wrapper = assignment.targetUrl
          ? document.createElement("a")
          : document.createElement("div");
        wrapper.className = "odulp-inline-ad-image";
        if (wrapper instanceof HTMLAnchorElement) {
          wrapper.href = assignment.targetUrl;
          wrapper.target = "_blank";
          wrapper.rel = "sponsored noopener";
        }
        const img = document.createElement("img");
        img.src = assignment.imageUrl;
        img.alt = assignment.altText || assignment.name || "";
        img.loading = "lazy";
        wrapper.appendChild(img);
        marker.appendChild(wrapper);
        marker.classList.add("odulp-inline-ad-slot--ready");
        return true;
      }

      return false;
    }

    async function hydrateInlineAdsFallback() {
      const markers = Array.from(document.querySelectorAll("[data-odulp-ad-slot]")).filter((marker) => {
        if (!(marker instanceof HTMLElement)) return false;
        if (marker.dataset.odulpAdInitialized === "true") return false;
        if (marker.querySelector("ins.adsbygoogle")) return false;
        return true;
      });

      if (markers.length === 0) return;

      const assignments = await fetchAssignments();
      markers.forEach((marker) => {
        const slotKey = String(marker.dataset.odulpAdSlot || "").trim();
        const assignment = resolveAssignment(slotKey, assignments);
        if (!assignment) return;
        const rendered = renderAssignment(marker, assignment);
        if (rendered) {
          marker.dataset.odulpAdInitialized = "true";
        }
      });
    }

    const scheduleHydration = () => {
      window.setTimeout(() => {
        void hydrateInlineAdsFallback();
      }, 0);
      window.setTimeout(() => {
        void hydrateInlineAdsFallback();
      }, 750);
    };

    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", scheduleHydration, { once: true });
    } else {
      scheduleHydration();
    }
  })();
</script> <script type="module" src="/scripts/blog-layout.js?v=6bc0836f4c"></script> </body> </html>  <script>(function(){const SUPPORTED_LANGS = ["en"];
const DEFAULT_LANG = "en";
const LABELS_BY_LANG = {"en":{"by":"By","of":"of","to":"to","home":"Home","hubs":{"recipesWithThisTopic":"More recipes","articlesWithThisTopic":"Related articles"},"tags":"Ingredients","title":"Baking Blog","search":"Search","seeAll":"See all","allTags":"All Ingredients","showing":"Showing","tagline":"Baking recipes, technique, and inspiration","nextText":"Next","postedIn":"Posted in","prevText":"Previous","readMore":"Read more","articleBy":"article by","copyright":"Baking Blog. All rights reserved.","createdBy":"Created by","embedCode":{"copy":"Copy","title":"Share this infographic","copied":"Copied!","preview":"Preview:","howToUse":"How to use:","htmlCode":"HTML code:","description":"Copy the code below to embed this infographic on your website or blog.","instructions":"Paste this HTML code where the infographic should appear. The link will send visitors to the original source page."},"postLabel":"posts","shareThis":"Share:","allAuthors":"All Authors","articlesBy":"articles by","backToHome":"Back to Home","categories":"Categories","exploreBlog":"Explore all articles in the {category} category.","latestPosts":"Latest Recipes","publishedOn":"Published on","discoverMore":"Discover more","viewAllPosts":"View all posts","allCategories":"All Categories","cookieConsent":{"title":"This website uses cookies","external":"External","acceptAll":"Accept all","analytics":"Analytics","customize":"Customize","marketing":"Marketing","necessary":"Necessary","rejectAll":"Reject all","description":"We use cookies and similar technologies to improve the browsing experience, understand traffic, and remember your preferences.","preferences":"Preferences","alwaysActive":"Always active","cookiePolicy":"Cookie policy","externalDesc":"Embedded third-party content such as video or CDN assets.","analyticsDesc":"Helps us understand how visitors use the site.","marketingDesc":"Used only if marketing or advertising tools are enabled.","necessaryDesc":"Essential cookies required for the site to function properly.","privacyPolicy":"Privacy policy","preferencesDesc":"Remembers your display and consent preferences.","savePreferences":"Save preferences"},"featuredPosts":"Featured posts","notFoundTitle":"Page not found","shareViaEmail":"Share by email","shareOnTwitter":"Share on Twitter/X","noArticlesFound":"No content found.","notFoundMessage":"The page you requested could not be found.","shareOnFacebook":"Share on Facebook","shareOnLinkedin":"Share on LinkedIn","shareOnTelegram":"Share on Telegram","shareOnWhatsapp":"Share on WhatsApp","aboutThisArticle":"About this article","searchModalTitle":"Search recipes","shareOnPinterest":"Share on Pinterest","shareThisArticle":"Share this article","youMightAlsoLike":"You might also like","articleInCategory":"article in category","articleTaggedWith":"article tagged with","searchPlaceholder":"Start typing to search recipes...","articlesInCategory":"articles in category","articlesTaggedWith":"articles tagged with","exploreExcellences":"Explore all articles in the {category} category.","exploreIngredients":"Explore all articles in the {category} category.","notFoundSuggestion":"The page may have moved or been removed. Return to the homepage to continue browsing.","recommendedProduct":"Recommended product","aboutThisExcellence":"About this excellence","aboutThisIngredient":"About this ingredient","exploreArticlesByTags":"Browse content by ingredient and topic.","searchInputPlaceholder":"Search recipes...","exploreArticlesByAuthors":"Browse content by author.","exploreArticlesByCategories":"Browse content by category."}};
const SITE_ROOT = "https://ryansbakingblog.com";

  window.__INITNOTFOUNDPAGE__ = {
    supportedLanguages: SUPPORTED_LANGS,
    defaultLanguage: DEFAULT_LANG,
    labelsByLang: LABELS_BY_LANG,
    siteRoot: SITE_ROOT,
    track: true
  };
})();</script> <script type="module" src="/scripts/public/not-found.js"></script>