diff --git a/assets/js/promo-popup.js b/assets/js/promo-popup.js index d329384..5127a49 100644 --- a/assets/js/promo-popup.js +++ b/assets/js/promo-popup.js @@ -1,8 +1,7 @@ (function () { - var POPUP_KEY = 'flooritPromo2026'; - var TOPBAR_KEY = 'flooritTopbar2026'; - var DELAY_MS = 5000; - var EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; + var POPUP_KEY = 'flooritPromo2026'; + var DELAY_MS = 5000; + var EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; function isStored(key) { try { @@ -15,32 +14,14 @@ try { localStorage.setItem(key, String(Date.now() + EXPIRY_MS)); } catch (e) {} } - /* --- Topbar -------------------------------------------- */ - function showTopbar() { - var bar = document.getElementById('promo-topbar'); + /* --- Topbar (always visible, no dismiss) --------------- */ + function initTopbar() { + var bar = document.getElementById('promo-topbar'); + var offerBtn = document.getElementById('promo-topbar-btn'); if (!bar) return; bar.classList.add('visible'); document.body.classList.add('has-topbar'); - } - - function hideTopbar() { - var bar = document.getElementById('promo-topbar'); - if (!bar) return; - bar.classList.remove('visible'); - document.body.classList.remove('has-topbar'); - store(TOPBAR_KEY); - } - - function initTopbar() { - if (isStored(TOPBAR_KEY) || isStored(POPUP_KEY)) return; - showTopbar(); - var closeBtn = document.getElementById('promo-topbar-close'); - var offerBtn = document.getElementById('promo-topbar-btn'); - if (closeBtn) closeBtn.addEventListener('click', hideTopbar); - if (offerBtn) offerBtn.addEventListener('click', function () { - hideTopbar(); - openPopup(); - }); + if (offerBtn) offerBtn.addEventListener('click', openPopup); } /* --- Popup --------------------------------------------- */ @@ -60,7 +41,6 @@ setTimeout(function () { overlay.style.display = 'none'; }, 350); } store(POPUP_KEY); - hideTopbar(); } function initPopup() { diff --git a/infra/nginx.conf b/infra/nginx.conf index e558c4e..e699701 100644 --- a/infra/nginx.conf +++ b/infra/nginx.conf @@ -26,7 +26,11 @@ http { gzip_types text/html text/css application/javascript image/svg+xml; gzip_min_length 1024; - limit_req_zone $binary_remote_addr zone=contact_limit:10m rate=5r/m; + map $request_method $contact_rl_key { + POST $binary_remote_addr; + default ""; + } + limit_req_zone $contact_rl_key zone=contact_limit:10m rate=5r/m; server { listen 80 default_server; diff --git a/sitemap.xml b/sitemap.xml index 7600db6..2c38c49 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,97 +2,103 @@ https://floorithardwoodfloors.com/ - 2026-05-27 + 2026-05-31 weekly 1.0 https://floorithardwoodfloors.com/about/ - 2026-05-27 + 2026-05-31 monthly 0.8 https://floorithardwoodfloors.com/contact/ - 2026-05-27 + 2026-05-31 monthly 0.9 https://floorithardwoodfloors.com/reviews/ - 2026-05-27 + 2026-05-31 weekly 0.8 + + https://floorithardwoodfloors.com/blog/ + 2026-05-31 + weekly + 0.7 + https://floorithardwoodfloors.com/services/ - 2026-05-27 + 2026-05-31 monthly 0.9 - https://floorithardwoodfloors.com/services/floor-refinishing.html - 2026-05-27 + https://floorithardwoodfloors.com/services/floor-installation/ + 2026-05-31 monthly 0.85 - https://floorithardwoodfloors.com/services/floor-installation.html - 2026-05-27 + https://floorithardwoodfloors.com/services/floor-refinishing/ + 2026-05-31 monthly 0.85 - https://floorithardwoodfloors.com/services/floor-restoration.html - 2026-05-27 + https://floorithardwoodfloors.com/services/floor-restoration/ + 2026-05-31 monthly 0.85 - https://floorithardwoodfloors.com/services/floor-sanding.html - 2026-05-27 + https://floorithardwoodfloors.com/services/floor-sanding/ + 2026-05-31 monthly 0.85 https://floorithardwoodfloors.com/locations/ - 2026-05-27 + 2026-05-31 monthly 0.8 - https://floorithardwoodfloors.com/locations/buffalo.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/buffalo/ + 2026-05-31 monthly 0.85 - https://floorithardwoodfloors.com/locations/amherst.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/amherst/ + 2026-05-31 monthly 0.8 - https://floorithardwoodfloors.com/locations/williamsville.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/williamsville/ + 2026-05-31 monthly 0.8 - https://floorithardwoodfloors.com/locations/east-amherst.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/clarence/ + 2026-05-31 monthly 0.8 - https://floorithardwoodfloors.com/locations/clarence.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/east-amherst/ + 2026-05-31 monthly 0.8 - https://floorithardwoodfloors.com/locations/lancaster.html - 2026-05-27 + https://floorithardwoodfloors.com/locations/lancaster/ + 2026-05-31 monthly 0.8 diff --git a/src/api/components/_header.php b/src/api/components/_header.php index a827189..eb4a54b 100644 --- a/src/api/components/_header.php +++ b/src/api/components/_header.php @@ -10,6 +10,7 @@ while ($row = $nav_result->fetchArray(SQLITE3_ASSOC)) { } $db->close(); $canonical = $canonical ?? ''; +$schema_json = $schema_json ?? ''; $page_title = htmlspecialchars($page_title ?? 'Floor It Hardwood Floors', ENT_QUOTES); $page_meta = htmlspecialchars($page_meta ?? '', ENT_QUOTES); ?> @@ -21,6 +22,8 @@ $page_meta = htmlspecialchars($page_meta ?? '', ENT_QUOTES); + + @@ -32,7 +35,6 @@ $page_meta = htmlspecialchars($page_meta ?? '', ENT_QUOTES);