From 64606a6e46af2626800e9f7f0b0eb97e75eda061 Mon Sep 17 00:00:00 2001 From: sumitshinde-84 Date: Thu, 13 Aug 2026 14:15:42 +0530 Subject: [PATCH 1/2] Fix 404s and add redirects --- nuxt/redirects.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/nuxt/redirects.ts b/nuxt/redirects.ts index ce06a7be8a..ca6b300d66 100644 --- a/nuxt/redirects.ts +++ b/nuxt/redirects.ts @@ -106,4 +106,42 @@ export const redirects: Record = { '/blog/2025/04/building-oee-dashboard-with-flowfuse-part-3/': { redirect: { to: '/blog/2025/04/design-and-scale-oee-dashboard/', statusCode: 301 } }, '/sign-up/': { redirect: { to: 'https://app.flowfuse.com/account/create', statusCode: 301 } }, + '/handbook/development/contributing/': { redirect: { to: '/handbook/engineering/contributing/', statusCode: 301 } }, + '/changelog/2025/06/instance-performance-view/': { redirect: { to: '/changelog/2025/06/team-performance-view/', statusCode: 301 } }, + '/integrations/node-red-contrib-abb-gofa': { redirect: { to: '/integrations/', statusCode: 301 } }, + '/integrations/node-red-contrib-opcua/PLC_1.xml': { redirect: { to: '/integrations/node-red-contrib-opcua/', statusCode: 301 } }, + '/handbook/engineering/product/product swimlanes/': { redirect: { to: '/handbook/engineering/product/product-swimlanes/', statusCode: 301 } }, + '/ingest': { redirect: { to: '/', statusCode: 301 } }, + '/handbook/marketing/customer-stories': { redirect: { to: '/handbook/marketing/content-strategy/customer-stories/', statusCode: 301 } }, + '/handbook/marketing/customer-stories/': { redirect: { to: '/handbook/marketing/content-strategy/customer-stories/', statusCode: 301 } }, + '/blog/2023/08/new-starter-tier/': { redirect: { to: '/blog/2023/08/flowfuse-1-11-release/', statusCode: 301 } }, + '/handbook/peopleops/job-descriptions/technical-product-manager': { redirect: { to: '/handbook/peopleops/job-descriptions/product-manager/', statusCode: 301 } }, + '/handbook/peopleops/job-descriptions/technical-product-manager/': { redirect: { to: '/handbook/peopleops/job-descriptions/product-manager/', statusCode: 301 } }, + '/node-red/fundamentals/': { redirect: { to: '/blog/2023/01/getting-started-with-node-red/', statusCode: 301 } }, + '/webinars/mqtt-vs-opc-ua-industrial-data-showdown/': { redirect: { to: '/webinars/2026/mqtt-vs-opc-ua-industrial-data-showdown/', statusCode: 301 } }, + '/handbook/marketing/email/': { redirect: { to: '/handbook/marketing/', statusCode: 301 } }, + '/blog/community/': { redirect: { to: '/blog/', statusCode: 301 } }, + '/blog/community/1/': { redirect: { to: '/blog/', statusCode: 301 } }, + '/handbook/development/security': { redirect: { to: '/handbook/engineering/security/', statusCode: 301 } }, + '/handbook/development/security/': { redirect: { to: '/handbook/engineering/security/', statusCode: 301 } }, + '/handbook/development/packaging/': { redirect: { to: '/handbook/engineering/packaging/', statusCode: 301 } }, + '/get-started/': { redirect: { to: '/', statusCode: 301 } }, + '/blog/2024/07/calling-python-script-from-node-red/example.py': { redirect: { to: '/blog/2024/07/calling-python-script-from-node-red/', statusCode: 301 } }, + '/handbook/customer/sales/regions/': { redirect: { to: '/handbook/sales/regions/', statusCode: 301 } }, + '/handbook/sales/v2/edge-connect-process/': { redirect: { to: '/handbook/sales/edge-connect-process/', statusCode: 301 } }, + '/handbook/sales/v2/': { redirect: { to: '/handbook/sales/', statusCode: 301 } }, + '/handbook/development/ops/': { redirect: { to: '/handbook/engineering/ops/', statusCode: 301 } }, + '/handbook/development/ab-testing/': { redirect: { to: '/handbook/engineering/', statusCode: 301 } }, + '/handbook/development/ops/staging/': { redirect: { to: '/handbook/engineering/ops/staging/', statusCode: 301 } }, + '/jobs/dashboard-2-fe-engineer/': { redirect: { to: '/', statusCode: 301 } }, + '/product/cloud/': { redirect: { to: '/product/hub/', statusCode: 301 } }, + '/handbook/development/ops/observability': { redirect: { to: '/handbook/engineering/ops/observability/', statusCode: 301 } }, + '/handbook/development/ops/observability/': { redirect: { to: '/handbook/engineering/ops/observability/', statusCode: 301 } }, + '/handbook/product/strategy/': { redirect: { to: '/handbook/product/', statusCode: 301 } }, + '/docs/user/assistant': { redirect: { to: '/docs/user/expert/', statusCode: 301 } }, + '/handbook/marketing/videos/': { redirect: { to: '/handbook/design/videos/', statusCode: 301 } }, + '/handbook/development/releases': { redirect: { to: '/handbook/engineering/releases/', statusCode: 301 } }, + '/handbook/development/releases/': { redirect: { to: '/handbook/engineering/releases/', statusCode: 301 } }, + '/handbook/peopleops/job-descriptions/dashboard-engineer/': { redirect: { to: '/handbook/peopleops/job-descriptions/', statusCode: 301 } }, + } From ee87e9290ef43991d0ceff3f444c0eb6aa9abebf Mon Sep 17 00:00:00 2001 From: "sumit shinde ( Roni )" <110285294+sumitshinde-84@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:50:22 +0530 Subject: [PATCH 2/2] Update redirects.ts --- nuxt/redirects.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nuxt/redirects.ts b/nuxt/redirects.ts index 2a761fde2c..328c308564 100644 --- a/nuxt/redirects.ts +++ b/nuxt/redirects.ts @@ -111,7 +111,7 @@ export const redirects: Record = { '/changelog/2025/06/instance-performance-view/': { redirect: { to: '/changelog/2025/06/team-performance-view/', statusCode: 301 } }, '/integrations/node-red-contrib-abb-gofa': { redirect: { to: '/integrations/', statusCode: 301 } }, '/integrations/node-red-contrib-opcua/PLC_1.xml': { redirect: { to: '/integrations/node-red-contrib-opcua/', statusCode: 301 } }, - '/handbook/engineering/product/product swimlanes/': { redirect: { to: '/handbook/engineering/product/product-swimlanes/', statusCode: 301 } }, + '/handbook/engineering/product/product%20swimlanes/': { redirect: { to: '/handbook/engineering/product/product-swimlanes/', statusCode: 301 } }, '/ingest': { redirect: { to: '/', statusCode: 301 } }, '/handbook/marketing/customer-stories': { redirect: { to: '/handbook/marketing/content-strategy/customer-stories/', statusCode: 301 } }, '/handbook/marketing/customer-stories/': { redirect: { to: '/handbook/marketing/content-strategy/customer-stories/', statusCode: 301 } },