From 0f591eaf5b2d579700a84cfd494760ce51623e19 Mon Sep 17 00:00:00 2001 From: Mimingguang <498526323@qq.com> Date: Wed, 25 Mar 2026 09:27:46 +0800 Subject: [PATCH] Fix product URLs, prerender routes and links Update routes and URL handling for product pages and improve prerender behavior. Changes include: - data/pricing.json: change summer camp URL to the canonical "/summer-camp" path. - nuxt.config.js: set prerender.failOnError = false and clean up the prerender routes list (replace old product slugs with new ones, remove duplicated entries, and consolidate gallery/news/calendar/stories routes). - pages/destinations/[id].vue: switch product links to use a productUrl helper and add mapping rules so autumn-*/winter-* IDs route to /products/autumn and /products/winter, and the summer-camp ID routes to /summer-camp. These changes align link generation with updated product routes and make prerendering more robust. --- data/pricing.json | 2 +- nuxt.config.js | 34 ++++++---------------------------- pages/destinations/[id].vue | 9 ++++++++- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/data/pricing.json b/data/pricing.json index 6f1b659..6d1004c 100644 --- a/data/pricing.json +++ b/data/pricing.json @@ -82,7 +82,7 @@ "每期仅限8组家庭", "含爸妈托管时段" ], - "url": "/products/summer-camp" + "url": "/summer-camp" }, { "id": "autumn", diff --git a/nuxt.config.js b/nuxt.config.js index acec125..1576f84 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -7,17 +7,15 @@ export default defineNuxtConfig({ // 部署时使用 `nuxt build` + Node.js 服务器(如 PM2)。 // 若必须静态部署,需将表单改为第三方服务(飞书/EmailJS 等)。 prerender: { + failOnError: false, crawlLinks: true, routes: [ '/', '/about', '/products', '/summer-camp', '/winter-camp', '/courses', '/guides', '/guide-custom', '/faq', '/reviews', '/contact', '/customize', '/pricing', '/selector', '/sitemap.xml', - '/products/v9-4d3n', '/products/v9-5d4n', '/products/v9-6d5n-family', - '/products/v9-6d5n-comfort', '/products/v9-7d6n-family', '/products/v9-7d6n-wild', + '/products/v9-5d4n-forest', '/products/v9-5d4n-prairie', + '/products/v9-6d5n-family', '/products/v9-6d5n-explore', + '/products/v9-7d6n-family', '/products/v9-7d6n-wild', '/products/autumn', '/products/winter', - '/gallery', - '/gallery', - '/news', '/calendar', - - '/stories', + '/gallery', '/news', '/calendar', '/stories', '/blog', '/blog/hulunbuir-travel-guide-2026', '/blog/hulunbuir-family-travel-guide', @@ -30,28 +28,8 @@ export default defineNuxtConfig({ '/destinations', '/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin', '/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli', - '/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei', + '/destinations/hulunhu', '/destinations/aershan', '/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe', - '/products/autumn', '/products/winter', - '/products/autumn', '/products/winter', - '/products/autumn', '/products/winter', - '/destinations', - '/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin', - '/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli', - '/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei', - '/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe', - '/gallery', - '/news', '/calendar', - '/stories', - '/blog', - '/blog/hulunbuir-travel-guide-2026', - '/blog/hulunbuir-family-travel-guide', - '/blog/hulunbuir-best-month-to-visit', - '/blog/hulunbuir-self-drive-vs-chartered-bus', - '/blog/hulunbuir-travel-cost-breakdown', - '/blog/hulunbuir-travel-with-toddlers-4-6', - '/blog/hulunbuir-travel-tips-avoid-pitfalls', - '/blog/grassland-photography-outfit-guide', ], }, }, diff --git a/pages/destinations/[id].vue b/pages/destinations/[id].vue index 3495221..8a18858 100644 --- a/pages/destinations/[id].vue +++ b/pages/destinations/[id].vue @@ -62,7 +62,7 @@ {{ p.name }} @@ -179,6 +179,13 @@ const relatedProducts = computed(() => (dest.value?.relatedProducts || []) .map(pid => allVersions.value.find(v => v.id === pid)) .filter(Boolean) ) + +function productUrl(id) { + if (id.startsWith('autumn-')) return '/products/autumn' + if (id.startsWith('winter-')) return '/products/winter' + if (id === 'summer-camp') return '/summer-camp' + return `/products/${id}` +}