Files
dealplustech-astroreal/src/layouts/Layout.astro
hermes b34f8fc2fb feat(blog): Phase 5 SEO/GEO content with 5 new blog posts
Add 5 long-form Thai blog posts (1,200-2,500 words each) with SEO + GEO
optimization for the dealplustech water-systems site. Each post targets
a specific audience (contractors, engineers, project managers) and
follows a content-quality workflow: source real product specs, verify
Thai text, dedupe images, link back to product pages.

## New blog posts (src/content/blog/)
- thermobreak-guide.md (Thermobreak closed-cell insulation overview)
- plastic-grilles-guide.md (ABS plastic grilles for HVAC)
- ppr-pipe-guide.md (PPR pipe properties + heat-fusion welding)
- ppr-vs-hdpe-vs-upvc.md (3-way pipe comparison with PE80/PE100)
- thermobreak-series-guide.md (Thermobreak LS vs Solar series)
- 10-things-checklist-pipe-ordering.md (10-point pre-order checklist)

## Removed legacy posts
- pipe-knowledge.md, valve-guide.md, welcome-post.md (orphans)

## Hero images (public/images/blog/)
~20 product photos sourced from manufacturers (Thermobreak, Thai PPR,
thaiconsupply) plus Nano Banana Pro infographics. All resized to
3:2 aspect ratio per user preference. Source folder preserved for
re-derivation.

## Astro layout/SEO work
- src/components/seo/SEO.astro, JsonLd.astro (new SEO components)
- src/layouts/BaseLayout.astro, Layout.astro (OG/Twitter/JSON-LD wiring)
- src/pages/404.astro
- Product pages (8): added #pricelist anchors + schema work
- src/styles/global.css: scroll-padding for sticky-header anchors

## Automation scripts (scripts/)
- build_og_image.py (OG image builder)
- inject_faq_schema.py, inject_product_schema.py (JSON-LD injection)

## Misc
- public/robots.txt, public/images/og/default-og.jpg
- .gitignore: exclude scripts/__pycache__/
2026-06-08 12:45:32 +07:00

80 lines
2.2 KiB
Plaintext

---
import '@/styles/global.css';
import SEO from '@/components/seo/SEO.astro';
interface Props {
title: string;
description?: string;
/** Path-only or absolute URL. Defaults to /images/og/default-og.jpg */
ogImage?: string;
/** Override canonical URL. Default: current pathname */
canonical?: string;
/** og:type — "website" for pages, "article" for blog */
ogType?: 'website' | 'article' | 'product';
/** Article published time (ISO) — only used when ogType=article */
publishedTime?: string;
/** Article author — only used when ogType=article */
author?: string;
/** Indexing policy. Default: 'index, follow' */
robots?: string;
}
const {
title,
description = "ดีล พลัส เทค - ระบบน้ำคุณภาพสูง ราคาโรงงาน",
ogImage,
canonical,
ogType = 'website',
publishedTime,
author,
robots,
} = Astro.props;
---
<!doctype html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content={description} />
<link rel="icon" type="image/png" href="/apple-touch-icon.png" sizes="180x180" />
<link rel="preload" as="image" href="/images/logo/dealplustech-logo.png" type="image/png" />
<link rel="preload" as="image" href="/images/og/default-og.jpg" type="image/jpeg" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Kanit:wght@400;500;600;700&family=Noto+Sans+Thai:wght@400;500;600&display=swap" rel="stylesheet" />
<SEO
title={title}
description={description}
ogImage={ogImage}
canonical={canonical}
ogType={ogType}
publishedTime={publishedTime}
author={author}
robots={robots}
/>
<title>{title}</title>
</head>
<body class="min-h-screen bg-neutral-50">
<slot />
</body>
</html>
<style is:global>
/* Page transition animations */
main {
animation: fadeIn 0.3s ease-out;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>