Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions src/lib/seo-landing-pages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -453,9 +453,9 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {
},
"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:
Expand Down Expand Up @@ -641,7 +641,7 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {
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"],
Expand Down Expand Up @@ -800,9 +800,9 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {
},
"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:
Expand Down Expand Up @@ -7038,8 +7038,8 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {

"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.",
Expand Down Expand Up @@ -8657,8 +8657,8 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {

"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.",
Expand Down Expand Up @@ -8897,8 +8897,8 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {

"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.",
Expand Down Expand Up @@ -9677,8 +9677,8 @@ export const seoLandingPages: Record<string, SeoLandingPageConfig> = {

"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.",
Expand Down
15 changes: 15 additions & 0 deletions src/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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/")) {
Expand Down