diff --git a/src/lib/seo-landing-pages.ts b/src/lib/seo-landing-pages.ts index 1821b2721..b522dd16b 100644 --- a/src/lib/seo-landing-pages.ts +++ b/src/lib/seo-landing-pages.ts @@ -453,9 +453,9 @@ export const seoLandingPages: Record = { }, "best-gaming-laptops-us": { slug: "best-gaming-laptops-us", - title: "Best Gaming Laptops in 2026 — Top RTX 5070 & 5080 Deals from $1,099", + title: "Best Gaming Laptops 2026: RTX 5070/5080 from $1,099 | Compare Deals", description: - "Compare RTX 5070 and 5080 gaming laptop deals across ASUS ROG Zephyrus G16, Lenovo Legion Pro 7i, HP Omen, Acer Predator, and Alienware — live prices from $1,099.", + "Compare RTX 5070 and 5080 gaming laptop deals. ASUS ROG, Lenovo Legion, HP Omen, Acer Predator, Alienware. Live prices from $1,099. Updated daily.", heroEyebrow: "US Laptop Guide", heroTitle: "Best Gaming Laptops in 2026", heroBody: @@ -641,7 +641,7 @@ export const seoLandingPages: Record = { currency: "USD", locale: "en_US", searchQuery: "robot vacuum", - refreshedLabel: "Refreshed April 26, 2026", + refreshedLabel: "Refreshed June 24, 2026", productSectionTitle: "Live robot vacuum deals across the US", comparisonSectionTitle: "Top robot vacuum picks at a glance", comparisonColumns: ["Model", "Price", "Suction", "Mop", "Self-Emptying", "Best For"], @@ -800,9 +800,9 @@ export const seoLandingPages: Record = { }, "best-gaming-laptop-singapore": { slug: "best-gaming-laptop-singapore", - title: "Best Gaming Laptop Price & Sales in Singapore 2026 — Compare ROG, Legion, Predator", + title: "Gaming Laptop Singapore 2026: ROG, Legion, Predator Prices | SGD Deals", description: - "Compare the best gaming laptop prices and sales in Singapore for 2026 across ASUS ROG, Lenovo Legion, Acer Predator, HP Omen, and Alienware, with live SG retailer pricing.", + "Compare gaming laptop prices in Singapore 2026. ASUS ROG, Lenovo Legion, Acer Predator, HP Omen. Live SGD pricing from SG retailers. Updated weekly.", heroEyebrow: "Singapore Laptop Guide", heroTitle: "Best Gaming Laptops in Singapore", heroBody: @@ -7038,8 +7038,8 @@ export const seoLandingPages: Record = { "best-pressure-washing-machines-us": { slug: "best-pressure-washing-machines-us", - title: "Best Pressure Washers in the US 2026", - description: "Compare electric and gas pressure washers from Ryobi, Sun Joe, Honda. Find the best pressure washer for decks, driveways, and siding.", + title: "Best Pressure Washers 2026: Ryobi, Sun Joe, Honda Compared | Deals", + description: "Compare electric and gas pressure washers from Ryobi, Sun Joe, Honda. Live prices from Amazon, Home Depot, Lowe. Best for decks, driveways, siding.", heroEyebrow: "US Shopping Guide", heroTitle: "Best Pressure Washers in the US 2026", heroBody: "Compare electric and gas pressure washers from Ryobi, Sun Joe, Honda. Find the best pressure washer for decks, driveways, and siding.", @@ -8657,8 +8657,8 @@ export const seoLandingPages: Record = { "best-android-tablets-us": { slug: "best-android-tablets-us", - title: "Best Android Tablets in the US 2026", - description: "Compare Samsung Galaxy Tab S9, Galaxy Tab S9 FE, Lenovo Tab P12. Find the best Android tablet for every budget.", + title: "Best Android Tablets 2026: Samsung Tab S9, Lenovo Compared | Deals", + description: "Compare Samsung Galaxy Tab S9, Tab S9 FE, Lenovo Tab P12. Live prices from Amazon, Best Buy, Walmart. Find the best Android tablet for every budget.", heroEyebrow: "US Shopping Guide", heroTitle: "Best Android Tablets in the US 2026", heroBody: "Compare Samsung Galaxy Tab S9, Galaxy Tab S9 FE, Lenovo Tab P12. Find the best Android tablet for every budget.", @@ -8897,8 +8897,8 @@ export const seoLandingPages: Record = { "best-budget-tvs-us": { slug: "best-budget-tvs-us", - title: "Cheapest TVs in 2026: TCL vs Hisense vs Amazon Fire — Best Deals Under $500", - description: "Compare budget TVs under $500: TCL 4-Series, Hisense U6, Amazon Fire TV — live prices from 5 US retailers. Updated weekly.", + title: "Buy Cheap TV 2026: TCL, Hisense, Fire TV Under $500 | In Stock", + description: "Where to buy cheap TVs 2026. Compare TCL 4-Series, Hisense U6, Amazon Fire TV under $500 at Walmart, Best Buy, Amazon. In stock now.", heroEyebrow: "US Shopping Guide", heroTitle: "Best Budget TVs in the US 2026", heroBody: "Find affordable TVs under $500 from TCL, Hisense, Amazon Fire. Best budget TVs for bedrooms and apartments.", @@ -9677,8 +9677,8 @@ export const seoLandingPages: Record = { "best-bluetooth-speakers-us": { slug: "best-bluetooth-speakers-us", - title: "Best Bluetooth Speakers in the US 2026", - description: "Compare JBL Flip 6, Bose SoundLink Flex, UE Boom 3. Find the best portable Bluetooth speakers for outdoor use.", + title: "Best Bluetooth Speakers 2026: JBL, Bose, UE Compared | Top Deals", + description: "Compare JBL Flip 6, Bose SoundLink Flex, UE Boom 3. Live prices from Amazon, Best Buy, Walmart. Best portable Bluetooth speakers 2026.", heroEyebrow: "US Shopping Guide", heroTitle: "Best Bluetooth Speakers in the US 2026", heroBody: "Compare JBL Flip 6, Bose SoundLink Flex, UE Boom 3. Find the best portable Bluetooth speakers for outdoor use.", diff --git a/src/middleware.ts b/src/middleware.ts index 87f4a765c..f7edd4ccf 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -171,6 +171,18 @@ const DEAD_BLOG_SLUGS = new Set([ "where-to-buy-steam-deck-singapore", "where-to-buy-meta-quest-3-singapore", ]); +// BUY-56945: 6 /best-* URLs that never had blog posts and return 404. +// Their /blog/ counterparts already return 410 Gone. These bare /best-* URLs +// should also return 410 to cleanly de-index them. +const DEAD_BEST_SLUGS = new Set([ + "best-airpods-us", + "best-macbook-us", + "best-robot-vacuum-us", + "best-iphone-us", + "best-ipad-us", + "best-vacuum-us", +]); + function isDeadBlogSlug(pathname: string): boolean { const normalized = normalizePathname(pathname); @@ -213,6 +225,9 @@ function legacyRedirectPath(host: string, pathname: string): string | null { if (ACTIVE_BLOG_SLUGS.has(slug)) { return `/blog/${slug}`; } + if (DEAD_BEST_SLUGS.has(slug)) { + return "__GONE__"; + } } if (normalizedPath.startsWith("/blog/")) {