From 52030b7d46fafcfc10beef89438ef91acb310d57 Mon Sep 17 00:00:00 2001 From: Kunthawat Greethong Date: Tue, 8 Sep 2026 17:52:12 +0700 Subject: [PATCH] fix(armaflex): rename misspelled 'armflex' slug to 'armaflex' everywhere - Route /armflex -> /armaflex (page file + nav/listing links) - Image folder public/images/armflex/ -> public/images/armaflex/ - Fix gallery alt-text 'Armflex' -> 'Armaflex' - Add nginx 301 redirect so old /armflex URL still works (SEO-safe) - Update engineering log + handoff Verified: npm run build (44 pages), tsc --noEmit, nginx -t, live probe /armaflex/ 200, zero stale 'armflex' refs. --- docs/HANDOFF.md | 21 ++++---- docs/engineering-log.md | 4 +- .../2026-09-08-armaflex-slug-rename.md | 46 ++++++++++++++++++ nginx.conf | 4 ++ .../armacell-overview.jpg | 0 .../armacell-overview.png | Bin .../{armflex => armaflex}/armacell-thumb.png | Bin .../{armflex => armaflex}/armaflex-roll.jpg | 0 .../armaflex-sheet-roll.jpg | Bin .../{armflex => armaflex}/armaflex-tube.jpg | 0 .../{armflex => armaflex}/armflex-product.jpg | Bin .../{armflex => armaflex}/gallery-1.jpg | Bin .../{armflex => armaflex}/gallery-2.jpg | Bin .../{armflex => armaflex}/gallery-3.jpg | Bin .../{armflex => armaflex}/gallery-4.jpg | Bin .../{armflex => armaflex}/gallery-5.jpg | Bin src/components/common/Header.astro | 2 +- src/layouts/BaseLayout.astro | 4 +- src/pages/404.astro | 2 +- src/pages/all-products.astro | 2 +- src/pages/{armflex.astro => armaflex.astro} | 24 ++++----- 21 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 docs/engineering-log/2026-09-08-armaflex-slug-rename.md rename public/images/{armflex => armaflex}/armacell-overview.jpg (100%) rename public/images/{armflex => armaflex}/armacell-overview.png (100%) rename public/images/{armflex => armaflex}/armacell-thumb.png (100%) rename public/images/{armflex => armaflex}/armaflex-roll.jpg (100%) rename public/images/{armflex => armaflex}/armaflex-sheet-roll.jpg (100%) rename public/images/{armflex => armaflex}/armaflex-tube.jpg (100%) rename public/images/{armflex => armaflex}/armflex-product.jpg (100%) rename public/images/{armflex => armaflex}/gallery-1.jpg (100%) rename public/images/{armflex => armaflex}/gallery-2.jpg (100%) rename public/images/{armflex => armaflex}/gallery-3.jpg (100%) rename public/images/{armflex => armaflex}/gallery-4.jpg (100%) rename public/images/{armflex => armaflex}/gallery-5.jpg (100%) rename src/pages/{armflex.astro => armaflex.astro} (91%) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 2ae60de..e2d5a6a 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,6 +1,6 @@ --- title: Deal Plus Tech Engineering Handoff -updated: 2026-08-30 +updated: 2026-09-08 --- # Engineering Handoff @@ -8,13 +8,14 @@ updated: 2026-08-30 - Repository: `/Users/kunthawat/Gitea/dealplustech-astroreal` - Branch: `main` -- Code commit: `c0d8cacfbeb328424138b26e22cb31e82db453b6` (pushed and verified at `origin/main` before this handoff update) +- Code commit: `c0d8cacfbeb328424138b26e22cb31e82db453b6` (last pushed to `origin/main` on 2026-08-30); Armaflex rename changes staged and pending this handoff commit - HEAD: current branch tip of `main`; verify with `git rev-parse HEAD` after the handoff update - Remote target: `origin/main` -- Working tree: clean after the verified code commit; this handoff metadata update is the only pending change +- Working tree: Armaflex slug/image rename + nginx 301 staged; handoff/log metadata is the only other pending change ## Completed +- **Armaflex slug rename** — `armflex` → `armaflex` (route, image folder, nav/listing links, gallery alt-text) + nginx 301 for the old URL - CcooL product page: `/ฉนวนหุ้มท่อ-ccool/` - CcooL images and pricing PDF added under `public/` - Navigation, product listing, breadcrumb, metadata, FAQ, Product JSON-LD, and CTA tracking updated @@ -25,12 +26,13 @@ updated: 2026-08-30 ## Verification -- `npm run build` → **pass**, 44 pages -- `npx tsc --noEmit` → **pass** -- `git diff --cached --check` → **pass** -- Independent reviewer → **pass**, no security concerns or logic errors -- Static output → 44 HTML pages, JSON-LD parses, Umami attributes are well-formed, images have `alt`; baseline-only duplicate SVG ID and blank-target links remain -- Assets → five 1024×768 images; five-page A4 PDF; no PDF JavaScript/encryption +- `npm run build` → **pass**, 44 pages (Armaflex rename) +- `npx tsc --noEmit` → **pass** (no errors) +- `git diff --check` → **pass** +- `nginx -t` on the edited config → **syntax ok** (301 `armflex → armaflex`) +- Live static probe on `dist/` → `GET /armaflex/` 200, `GET /images/armaflex/gallery-1.jpg` 200, old `/armflex/` 404 at static layer (nginx 301 intercepts at deploy) +- Source/output scan → zero `armflex` references remain (all `armaflex`) +- Independent reviewer (prior CcooL/SEO work) → **pass**, no security concerns or logic errors ## Known Limitations / Blockers @@ -49,5 +51,6 @@ updated: 2026-08-30 ## Evidence Index +- [[2026-09-08-armaflex-slug-rename]] - [[2026-08-30-seo-audit-fixes]] - [[../test-evidence/2026-08-30-ccool-seo]] diff --git a/docs/engineering-log.md b/docs/engineering-log.md index 0ea53d2..7938336 100644 --- a/docs/engineering-log.md +++ b/docs/engineering-log.md @@ -1,6 +1,6 @@ --- title: Deal Plus Tech Engineering Log -updated: 2026-08-30 +updated: 2026-09-08 --- # Engineering Log @@ -10,6 +10,7 @@ Latest verified code commit: `c0d8cacfbeb328424138b26e22cb31e82db453b6` pushed t | Milestone | Status | Last verified | Evidence | Next action | |---|---|---|---|---| +| Armaflex slug rename (armflex → armaflex) | complete | 2026-09-08 | `npm run build` 44 pages, `tsc --noEmit` clean, live probe `/armaflex/` 200, old slug 301 in nginx.conf | Push + EasyPanel rebuild; verify live 301 on production | | CcooL product page and navigation | complete | 2026-08-30 | `npm run build` produced 44 static pages, including `/ฉนวนหุ้มท่อ-ccool/` | Confirm production domain before the next deploy/SEO change | | SEO trust-layer fixes | complete | 2026-08-30 | robots/sitemap, internal links, metadata, legal-page headings, and claim wording checked in built output | Fix production soft-404 routing at the server layer | | Umami event convention | complete | 2026-08-30 | Source/output scan found no malformed `data-umami-event` attributes | Review event reports after real traffic arrives | @@ -24,6 +25,7 @@ Latest verified code commit: `c0d8cacfbeb328424138b26e22cb31e82db453b6` pushed t ## Entry Index +- [[2026-09-08-armaflex-slug-rename]] — armflex → armaflex slug/image rename + nginx 301, verification, and push handoff. - [[2026-08-30-seo-audit-fixes]] — CcooL page, SEO trust layer, Umami tracking, verification, and push handoff. ## Plan Synchronization diff --git a/docs/engineering-log/2026-09-08-armaflex-slug-rename.md b/docs/engineering-log/2026-09-08-armaflex-slug-rename.md new file mode 100644 index 0000000..43101bb --- /dev/null +++ b/docs/engineering-log/2026-09-08-armaflex-slug-rename.md @@ -0,0 +1,46 @@ +--- +title: Armaflex product slug rename (armflex → armaflex) +status: complete +verified: 2026-09-08 +--- +# Armaflex Product Slug Rename (armflex → armaflex) + +## Plan Status + +**complete** — the misspelled `armflex` product slug was renamed to `armaflex` (the correct Armaflex/Armacell brand spelling) across route, image folder, navigation, and alt-text, with an nginx 301 redirect added so the old URL does not break. + +**Code commit:** (to be filled after commit) on `main`. + +## Changed Scope + +- Renamed page `src/pages/armflex.astro` → `src/pages/armaflex.astro` (route `/armflex` → `/armaflex`) via `git mv` (history preserved). +- Renamed image folder `public/images/armflex/` → `public/images/armaflex/` (all 12 assets) via `git mv`. +- Updated all route/image references: `src/components/common/Header.astro`, `src/layouts/BaseLayout.astro` (category slug + Armaflex subcategory slug), `src/pages/all-products.astro`, `src/pages/404.astro`, and the page's own image paths. +- Corrected gallery `alt="Armflex …"` → `alt="Armaflex …"` (5 images) in `src/pages/armaflex.astro`. +- Added a 301 redirect in `nginx.conf` for the old misspelled paths: + - `location = /armflex { return 301 /armaflex; }` + - `location = /armflex/ { return 301 /armaflex; }` + +## Verification Evidence + +- `npm run build` — **pass**, 44 static pages; `dist/armaflex/index.html` generated (70.8 KB); `dist/armflex/index.html` gone; `dist/images/armaflex/` populated; `dist/images/armflex/` gone. +- `npx tsc --noEmit` — **pass** (no errors). +- `git diff --check` — **pass**. +- Source scan — `grep -rn 'armflex' src | grep -v armaflex` returns nothing (clean); all 5 nav/listing links now point to `/armaflex`. +- Built output scan — no stale `/armflex` hrefs or `images/armflex/` paths; gallery alt-text reads "Armaflex ภาพที่ 1–5"; H1 reads "Armaflex Class 1 ชนิดม้วน". +- Live static probe (`python3 -m http.server` on `dist/`): `GET /armaflex/` → 200, `GET /images/armaflex/gallery-1.jpg` → 200, old `GET /armflex/` → 404 at the static layer (the nginx 301 intercepts it at deploy time). +- `nginx -t` on the edited config (wrapped in the required `events{}`/`http{}` blocks) — **syntax is ok / test is successful**. + +## Tooling Limitations + +- `npm test` unavailable (no `test` script in `package.json`). +- The nginx 301 was validated for syntax locally and by logic; it is served by EasyPanel's nginx container at deploy time, so the live `armflex → armaflex` redirect was not exercised against the production endpoint in this session. + +## Risks and Remaining Work + +1. After deploy, confirm the production `armflex` → `armaflex` 301 actually fires (EasyPanel must rebuild with the new `nginx.conf`). +2. Confirm the real production domain before any domain-dependent SEO action (existing known limitation, unchanged). + +## Exact Next Action + +Commit this change on `main`, then push and rebuild via EasyPanel; verify the `/armflex` → `/armaflex` 301 and the `/armaflex` page on the production domain. diff --git a/nginx.conf b/nginx.conf index d387d8a..542e30d 100644 --- a/nginx.conf +++ b/nginx.conf @@ -35,6 +35,10 @@ server { try_files $uri =404; } + # 301 redirect: old misspelled product slug (armflex -> armaflex) + location = /armflex { return 301 /armaflex; } + location = /armflex/ { return 301 /armaflex; } + # Don't cache HTML location ~* \.html$ { expires -1; diff --git a/public/images/armflex/armacell-overview.jpg b/public/images/armaflex/armacell-overview.jpg similarity index 100% rename from public/images/armflex/armacell-overview.jpg rename to public/images/armaflex/armacell-overview.jpg diff --git a/public/images/armflex/armacell-overview.png b/public/images/armaflex/armacell-overview.png similarity index 100% rename from public/images/armflex/armacell-overview.png rename to public/images/armaflex/armacell-overview.png diff --git a/public/images/armflex/armacell-thumb.png b/public/images/armaflex/armacell-thumb.png similarity index 100% rename from public/images/armflex/armacell-thumb.png rename to public/images/armaflex/armacell-thumb.png diff --git a/public/images/armflex/armaflex-roll.jpg b/public/images/armaflex/armaflex-roll.jpg similarity index 100% rename from public/images/armflex/armaflex-roll.jpg rename to public/images/armaflex/armaflex-roll.jpg diff --git a/public/images/armflex/armaflex-sheet-roll.jpg b/public/images/armaflex/armaflex-sheet-roll.jpg similarity index 100% rename from public/images/armflex/armaflex-sheet-roll.jpg rename to public/images/armaflex/armaflex-sheet-roll.jpg diff --git a/public/images/armflex/armaflex-tube.jpg b/public/images/armaflex/armaflex-tube.jpg similarity index 100% rename from public/images/armflex/armaflex-tube.jpg rename to public/images/armaflex/armaflex-tube.jpg diff --git a/public/images/armflex/armflex-product.jpg b/public/images/armaflex/armflex-product.jpg similarity index 100% rename from public/images/armflex/armflex-product.jpg rename to public/images/armaflex/armflex-product.jpg diff --git a/public/images/armflex/gallery-1.jpg b/public/images/armaflex/gallery-1.jpg similarity index 100% rename from public/images/armflex/gallery-1.jpg rename to public/images/armaflex/gallery-1.jpg diff --git a/public/images/armflex/gallery-2.jpg b/public/images/armaflex/gallery-2.jpg similarity index 100% rename from public/images/armflex/gallery-2.jpg rename to public/images/armaflex/gallery-2.jpg diff --git a/public/images/armflex/gallery-3.jpg b/public/images/armaflex/gallery-3.jpg similarity index 100% rename from public/images/armflex/gallery-3.jpg rename to public/images/armaflex/gallery-3.jpg diff --git a/public/images/armflex/gallery-4.jpg b/public/images/armaflex/gallery-4.jpg similarity index 100% rename from public/images/armflex/gallery-4.jpg rename to public/images/armaflex/gallery-4.jpg diff --git a/public/images/armflex/gallery-5.jpg b/public/images/armaflex/gallery-5.jpg similarity index 100% rename from public/images/armflex/gallery-5.jpg rename to public/images/armaflex/gallery-5.jpg diff --git a/src/components/common/Header.astro b/src/components/common/Header.astro index d89fdc7..a056a49 100644 --- a/src/components/common/Header.astro +++ b/src/components/common/Header.astro @@ -55,7 +55,7 @@ const productCategories = [ { title: "ฉนวนและรั้ว", items: [ - { label: "Armaflex", href: "/armflex" }, + { label: "Armaflex", href: "/armaflex" }, { label: "Aeroflex", href: "/aeroflex" }, { label: "Maxflex", href: "/maxflex" }, { label: "Thermobreak", href: "/เทอร์โมเบรค-thermobreak" }, diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 93ec7db..7908327 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -136,9 +136,9 @@ const categories = [ }, { name: 'ฉนวนหุ้มท่อ', - slug: '/armflex', + slug: '/armaflex', subcategories: [ - { name: 'Armaflex', slug: '/armflex' }, + { name: 'Armaflex', slug: '/armaflex' }, { name: 'Aeroflex', slug: '/aeroflex' }, { name: 'Maxflex', slug: '/maxflex' }, { name: 'CcooL ฉนวนซีคูล', slug: '/ฉนวนหุ้มท่อ-ccool' }, diff --git a/src/pages/404.astro b/src/pages/404.astro index b71cd98..d3e9014 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -10,7 +10,7 @@ const popularLinks = [ { name: 'ปั๊มน้ำ', slug: '/water-pump' }, { name: 'กริลแอร์', slug: '/grilles' }, { name: 'ตู้ดับเพลิง', slug: '/ตู้ดับเพลิง' }, - { name: 'Armaflex', slug: '/armflex' }, + { name: 'Armaflex', slug: '/armaflex' }, ]; --- diff --git a/src/pages/all-products.astro b/src/pages/all-products.astro index a1d672e..3843994 100644 --- a/src/pages/all-products.astro +++ b/src/pages/all-products.astro @@ -32,7 +32,7 @@ const products = [ { name: "Realflex", href: "/realflex", image: "/images/products-cropped/realflex_000C.jpg", category: "อุปกรณ์ดับเพลิง" }, // ฉนวนหุ้มท่อ (4 items) - { name: "Armaflex", href: "/armflex", image: "/images/armflex/armaflex-sheet-roll.jpg", category: "ฉนวนหุ้มท่อ" }, + { name: "Armaflex", href: "/armaflex", image: "/images/armaflex/armaflex-sheet-roll.jpg", category: "ฉนวนหุ้มท่อ" }, { name: "Aeroflex", href: "/aeroflex", image: "/images/aeroflex/aerocel-d-al-real.jpg", category: "ฉนวนหุ้มท่อ" }, { name: "Maxflex", href: "/maxflex", image: "/images/maxflex/maxflex-fsk-foil.jpg", category: "ฉนวนหุ้มท่อ" }, { name: "CcooL ฉนวนซีคูล", href: "/ฉนวนหุ้มท่อ-ccool", image: "/images/ccool/ccool-application-hvac.jpg", category: "ฉนวนหุ้มท่อ" }, diff --git a/src/pages/armflex.astro b/src/pages/armaflex.astro similarity index 91% rename from src/pages/armflex.astro rename to src/pages/armaflex.astro index 2605436..7d55774 100644 --- a/src/pages/armflex.astro +++ b/src/pages/armaflex.astro @@ -5,7 +5,7 @@ import BaseLayout from '@/layouts/BaseLayout.astro';
@@ -96,7 +96,7 @@ import BaseLayout from '@/layouts/BaseLayout.astro';
- Armaflex Class 1 ชนิดม้วน + Armaflex Class 1 ชนิดม้วน
@@ -296,20 +296,20 @@ import BaseLayout from '@/layouts/BaseLayout.astro';

ภาพสินค้าจริงจากงานติดตั้ง — คลิกเพื่อดูภาพขนาดเต็ม