New GV Auto Collision site: hero CTA, trust signals, before/after gallery, services, estimate form, Schema.org AutoRepair, SEO

This commit is contained in:
n1kt4r committed 2026-08-09 13:58:05 +05:00
1 parent d389eebeaf
commit 4a0747b335
21 files changed
+659 -251

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@ import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap'; import sitemap from '@astrojs/sitemap';
export default defineConfig({ export default defineConfig({
site: 'https://izhs-dom.ru', site: 'https://www.gvautocollision.com',
output: 'static', output: 'static',
integrations: [sitemap()], integrations: [sitemap()],
image: { image: {
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"name": "izhs-dom", "name": "gv-autocollision",
"type": "module", "type": "module",
"version": "0.0.1", "version": "0.0.1",
"scripts": { "scripts": {
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

+2 -2
View File
@@ -2,6 +2,6 @@ User-agent: *
Allow: / Allow: /
Disallow: /cdn-cgi/ Disallow: /cdn-cgi/
Sitemap: https://izhs-dom.ru/sitemap-index.xml Sitemap: https://www.gvautocollision.com/sitemap.xml
Host: izhs-dom.ru Host: www.gvautocollision.com
+381 -63
View File
@@ -14,9 +14,9 @@ const {
ogType = 'article', ogType = 'article',
} = Astro.props; } = Astro.props;
const baseUrl = 'https://izhs-dom.ru'; const baseUrl = 'https://www.gvautocollision.com';
const pageUrl = slug ? `${baseUrl}/blog/${slug}/` : baseUrl; const pageUrl = slug ? `${baseUrl}/blog/${slug}/` : baseUrl;
const ogImage = image || `${baseUrl}/og-image.svg`; const ogImage = image || `${baseUrl}/images/logo.png`;
const articleSchema = slug ? JSON.stringify({ const articleSchema = slug ? JSON.stringify({
"@context": "https://schema.org", "@context": "https://schema.org",
@@ -26,44 +26,70 @@ const articleSchema = slug ? JSON.stringify({
"datePublished": date || new Date().toISOString().split('T')[0], "datePublished": date || new Date().toISOString().split('T')[0],
"image": image || undefined, "image": image || undefined,
"url": `${baseUrl}/blog/${slug}/`, "url": `${baseUrl}/blog/${slug}/`,
"author": { "@type": "Organization", "name": "ИЖС Дом" }, "author": { "@type": "Organization", "name": "GV Auto Collision" },
"publisher": { "@type": "Organization", "name": "ИЖС Дом" } "publisher": { "@type": "Organization", "name": "GV Auto Collision" }
}) : ''; }) : '';
const breadcrumb = slug ? JSON.stringify({ const breadcrumb = slug ? JSON.stringify({
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "BreadcrumbList", "@type": "BreadcrumbList",
"itemListElement": [ "itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Главная", "item": baseUrl }, { "@type": "ListItem", "position": 1, "name": "Home", "item": baseUrl },
{ "@type": "ListItem", "position": 2, "name": "Статьи", "item": `${baseUrl}/blog/` }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": `${baseUrl}/blog/` },
{ "@type": "ListItem", "position": 3, "name": title, "item": `${baseUrl}/blog/${slug}/` } { "@type": "ListItem", "position": 3, "name": title, "item": `${baseUrl}/blog/${slug}/` }
] ]
}) : ''; }) : '';
const orgSchema = JSON.stringify({ const localBusinessSchema = JSON.stringify({
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "Organization", "@type": "AutoRepair",
"name": "ИЖС Дом", "name": "GV Auto Collision",
"description": "Professional collision repair in Los Angeles. Free towing, OEM parts, written warranty.",
"url": baseUrl, "url": baseUrl,
"description": "Строительство индивидуальных жилых домов в Уфе", "telephone": "+13106546484",
"sameAs": [ "address": {
"https://ru.wikipedia.org/wiki/Индивидуальное_жилищное_строительство", "@type": "PostalAddress",
"https://www.wikidata.org/wiki/Q4202048", "streetAddress": "794 Merchant St Unit 3",
"https://yandex.ru/profile/izhs-dom-ufa", "addressLocality": "Los Angeles",
"addressRegion": "CA",
"postalCode": "90021",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 34.04,
"longitude": -118.23
},
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], "opens": "08:00", "closes": "18:00" }
], ],
"priceRange": "$$",
"image": `${baseUrl}/images/hero-repair.jpg`,
"sameAs": [],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Collision Repair Services",
"itemListElement": [
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Collision Repair" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Paintless Dent Repair" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Frame Straightening" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "ADAS Calibration" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Tesla & EV Repair" } }
]
}
}); });
--- ---
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ru"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{title}</title> <title>{title}</title>
<meta name="description" content={description}> <meta name="description" content={description}>
<link rel="canonical" href={pageUrl}> <link rel="canonical" href={pageUrl}>
<link rel="icon" type="image/svg+xml" href="/favicon.svg"> <link rel="icon" type="image/png" href="/images/logo.png">
<!-- Pagefind search (файлы генерируются при pagefind --site dist после сборки) --> <!-- Pagefind search -->
<link href="/pagefind/pagefind-ui.css" rel="stylesheet" is:inline> <link href="/pagefind/pagefind-ui.css" rel="stylesheet" is:inline>
<script src="/pagefind/pagefind-ui.js" is:inline></script> <script src="/pagefind/pagefind-ui.js" is:inline></script>
@@ -73,67 +99,359 @@ const orgSchema = JSON.stringify({
<meta property="og:description" content={description}> <meta property="og:description" content={description}>
<meta property="og:url" content={pageUrl}> <meta property="og:url" content={pageUrl}>
<meta property="og:image" content={ogImage}> <meta property="og:image" content={ogImage}>
<meta property="og:site_name" content="ИЖС Дом"> <meta property="og:site_name" content="GV Auto Collision">
<meta property="og:locale" content="ru_RU"> <meta property="og:locale" content="en_US">
<!-- Twitter --> <!-- Twitter -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content={title}> <meta name="twitter:title" content={title}>
<meta name="twitter:description" content={description}> <meta name="twitter:description" content={description}>
<!-- CSP: Content Security Policy -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; script-src 'self' http://192.168.1.225:3000 https://cloud.umami.is 'unsafe-inline'; connect-src 'self' http://192.168.1.225:3000 https://cloud.umami.is">
<!-- Приватная аналитика (Umami Cloud — без cookie, бесплатно до 100K просмотров/мес) -->
<!-- Self-hosted: см. umami/docker-compose.yml (требуется Docker не-snap) -->
<script defer src="https://cloud.umami.is/script.js" data-website-id="5ab621f0-aa9b-4d9c-a928-ba2f970c006c"></script>
<!-- Schema.org JSON-LD --> <!-- Schema.org JSON-LD -->
{articleSchema && <script type="application/ld+json" set:html={articleSchema}></script>} {articleSchema && <script type="application/ld+json" set:html={articleSchema}></script>}
{breadcrumb && <script type="application/ld+json" set:html={breadcrumb}></script>} {breadcrumb && <script type="application/ld+json" set:html={breadcrumb}></script>}
<script type="application/ld+json" set:html={orgSchema}></script> <script type="application/ld+json" set:html={localBusinessSchema}></script>
<style> <style>
:root{--bg:#f8f9fa;--text:#1a1a2e;--accent:#2d6a4f;--card:#fff;--radius:8px} :root {
*{margin:0;padding:0;box-sizing:border-box} --bg: #0a0a0a;
body{font-family:system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.7} --bg-light: #141414;
.container{max-width:800px;margin:0 auto;padding:20px} --text: #f0f0f0;
header{padding:20px 0;border-bottom:2px solid var(--accent)} --text-muted: #999;
nav a{margin-right:16px;color:var(--accent);text-decoration:none;font-weight:600} --accent: #c8102e;
article{margin:32px 0;padding:24px;background:var(--card);border-radius:var(--radius);box-shadow:0 1px 3px rgba(0,0,0,.05)} --accent-hover: #a00d24;
article h1{font-size:28px;margin-bottom:12px} --card: #1a1a1a;
article h2{font-size:20px;margin:24px 0 12px} --radius: 12px;
article p{margin:8px 0} --shadow: 0 4px 20px rgba(0,0,0,0.3);
article ul,article ol{margin:8px 0;padding-left:24px} }
article strong{color:var(--accent)} * { margin:0; padding:0; box-sizing:border-box; }
.related{margin-top:32px;padding:16px;background:var(--card);border-radius:var(--radius)} body {
.related a{display:block;padding:4px 0;color:var(--accent)} font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
footer{text-align:center;padding:32px 0;color:#888;font-size:14px} background: var(--bg);
/* Поиск */ color: var(--text);
.search-bar{max-width:300px;margin-left:auto} line-height: 1.7;
.search-bar input{padding:6px 12px;border:1px solid #ddd;border-radius:6px;width:100%;font-size:14px} }
.pagefind-ui__results{position:absolute;background:var(--card);border:1px solid #ddd;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);z-index:100;margin-top:4px;max-height:400px;overflow-y:auto;width:300px} a { color: var(--accent); text-decoration: none; }
.pagefind-ui__result{padding:8px 12px;border-bottom:1px solid #eee} a:hover { text-decoration: underline; }
.pagefind-ui__result:last-child{border:none}
.pagefind-ui__result a{color:var(--accent);font-weight:600;text-decoration:none} /* Header */
.pagefind-ui__result p{font-size:12px;color:#666;margin:2px 0} header {
.pagefind-ui__drawer{display:none !important} background: var(--bg-light);
border-bottom: 1px solid #222;
position: sticky;
top: 0;
z-index: 100;
}
.header-inner {
max-width: 1200px;
margin: 0 auto;
padding: 12px 24px;
display: flex;
align-items: center;
justify-content: space-between;
}
.logo {
display: flex;
align-items: center;
gap: 10px;
font-weight: 700;
font-size: 18px;
color: var(--text);
text-decoration: none;
}
.logo img { height: 40px; }
nav { display: flex; align-items: center; gap: 20px; }
nav a { color: var(--text-muted); font-weight: 500; font-size: 14px; transition: color 0.2s; }
nav a:hover { color: var(--text); text-decoration: none; }
.nav-cta {
background: var(--accent);
color: #fff !important;
padding: 8px 16px;
border-radius: 6px;
font-weight: 600;
font-size: 14px;
}
.nav-cta:hover { background: var(--accent-hover); text-decoration: none; }
.nav-phone { color: var(--text) !important; font-weight: 600; }
/* Hero */
.hero {
max-width: 1200px;
margin: 0 auto;
padding: 60px 24px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
align-items: center;
}
.hero h1 {
font-size: 42px;
line-height: 1.15;
margin-bottom: 16px;
color: #fff;
}
.hero-subtitle {
font-size: 18px;
color: var(--text-muted);
margin-bottom: 24px;
}
.hero-cta { display: flex; gap: 12px; margin-bottom: 24px; }
.btn {
display: inline-block;
padding: 14px 28px;
border-radius: 8px;
font-weight: 600;
font-size: 16px;
text-decoration: none;
transition: all 0.2s;
cursor: pointer;
border: none;
}
.btn-primary { background: var(--accent); color: #fff; }
.btn-primary:hover { background: var(--accent-hover); text-decoration: none; transform: translateY(-1px); }
.btn-secondary { background: transparent; color: var(--text); border: 2px solid #444; }
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); text-decoration: none; }
.btn-full { width: 100%; text-align: center; }
.trust-badges { display: flex; gap: 12px; flex-wrap: wrap; }
.badge {
background: var(--bg-light);
padding: 6px 14px;
border-radius: 20px;
font-size: 13px;
color: var(--text-muted);
border: 1px solid #333;
}
.hero-image img {
width: 100%;
height: 400px;
object-fit: cover;
border-radius: var(--radius);
box-shadow: var(--shadow);
}
/* Sections */
section {
max-width: 1200px;
margin: 0 auto;
padding: 60px 24px;
}
section h2 {
font-size: 32px;
margin-bottom: 12px;
color: #fff;
}
.section-subtitle {
color: var(--text-muted);
font-size: 16px;
margin-bottom: 32px;
}
/* Trust Grid */
.trust-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.trust-card {
background: var(--card);
padding: 24px;
border-radius: var(--radius);
border: 1px solid #222;
}
.trust-icon { font-size: 32px; margin-bottom: 12px; }
.trust-card h3 { font-size: 18px; margin-bottom: 8px; color: #fff; }
.trust-card p { font-size: 14px; color: var(--text-muted); }
/* Process */
.process-steps {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 24px;
}
.step {
text-align: center;
padding: 24px;
}
.step-number {
width: 48px;
height: 48px;
background: var(--accent);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
font-weight: 700;
margin: 0 auto 16px;
}
.step h3 { font-size: 18px; margin-bottom: 8px; color: #fff; }
.step p { font-size: 14px; color: var(--text-muted); }
/* Gallery */
.gallery-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.gallery-item {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.gallery-before, .gallery-after {
position: relative;
border-radius: 8px;
overflow: hidden;
}
.gallery-before img, .gallery-after img {
width: 100%;
height: 200px;
object-fit: cover;
}
.gallery-label {
position: absolute;
bottom: 8px;
left: 8px;
background: rgba(0,0,0,0.7);
color: #fff;
padding: 4px 10px;
border-radius: 4px;
font-size: 12px;
font-weight: 600;
}
/* Services */
.services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 16px;
}
.service-card {
background: var(--card);
padding: 20px;
border-radius: var(--radius);
border: 1px solid #222;
transition: border-color 0.2s;
}
.service-card:hover { border-color: var(--accent); }
.service-card h3 { font-size: 16px; margin-bottom: 6px; color: #fff; }
.service-card p { font-size: 13px; color: var(--text-muted); }
/* Estimate Form */
.estimate-section {
background: var(--bg-light);
border-radius: var(--radius);
margin-bottom: 40px;
}
.estimate-form {
max-width: 700px;
margin: 0 auto;
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-bottom: 12px;
}
.form-row > *:full-width { grid-column: 1 / -1; }
input, textarea {
width: 100%;
padding: 12px 16px;
background: var(--card);
border: 1px solid #333;
border-radius: 8px;
color: var(--text);
font-size: 14px;
font-family: inherit;
}
input:focus, textarea:focus {
outline: none;
border-color: var(--accent);
}
input::placeholder, textarea::placeholder { color: #666; }
/* Contact */
.contact-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
align-items: start;
}
.contact-info h2 { margin-bottom: 16px; }
.address { font-size: 18px; margin-bottom: 12px; line-height: 1.5; }
.phone-link { font-size: 24px; font-weight: 700; color: var(--accent); display: block; margin-bottom: 12px; }
.hours { color: var(--text-muted); font-size: 14px; }
.map-container iframe {
width: 100%;
height: 350px;
border-radius: var(--radius);
border: none;
}
/* Footer */
footer {
background: var(--bg-light);
border-top: 1px solid #222;
padding: 32px 24px;
text-align: center;
color: var(--text-muted);
font-size: 14px;
}
.footer-inner {
max-width: 1200px;
margin: 0 auto;
}
.footer-links { margin-bottom: 12px; }
.footer-links a { margin: 0 12px; color: var(--text-muted); }
/* Mobile */
@media (max-width: 768px) {
.hero { grid-template-columns: 1fr; padding: 40px 16px; }
.hero h1 { font-size: 28px; }
.hero-image img { height: 250px; }
.hero-cta { flex-direction: column; }
.form-row { grid-template-columns: 1fr; }
.contact-grid { grid-template-columns: 1fr; }
.gallery-item { grid-template-columns: 1fr; }
nav { gap: 10px; }
.nav-phone span { display: none; }
}
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <header>
<header> <div class="header-inner">
<nav style="display:flex;align-items:center;"> <a href="/" class="logo">
<a href="/">🏠 ИЖС Дом</a> <img src="/images/logo.png" alt="GV Auto Collision">
<a href="/blog/">📝 Статьи</a> GV Auto Collision
<div class="search-bar" id="search"></div> </a>
<nav>
<a href="/#estimate">Free Estimate</a>
<a href="/#services">Services</a>
<a href="/#gallery">Portfolio</a>
<a href="tel:3106546484" class="nav-phone">📞 <span>(310) 654-6484</span></a>
<a href="/#estimate" class="nav-cta">Get Estimate</a>
</nav> </nav>
</header> </div>
<slot /> </header>
<footer>
<p>© 2024-2026 ИЖС Дом. Строительство домов.</p> <slot />
</footer>
</div> <footer>
<div class="footer-inner">
<div class="footer-links">
<a href="/">Home</a>
<a href="/#services">Services</a>
<a href="/#gallery">Portfolio</a>
<a href="/#estimate">Free Estimate</a>
<a href="tel:3106546484">Call (310) 654-6484</a>
</div>
<p>© 2026 GV Auto Collision. 794 Merchant St Unit 3, Los Angeles, CA 90021</p>
<p style="margin-top:8px;font-size:12px;">Professional collision repair. OEM parts. Written warranty. Free towing.</p>
</div>
</footer>
<script is:inline> <script is:inline>
new PagefindUI({ element: "#search", showSubResults: false, showImages: false }); new PagefindUI({ element: "#search", showSubResults: false, showImages: false });
</script> </script>
-10
View File
@@ -1,10 +0,0 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="404 — Страница не найдена">
<article style="text-align:center;padding:60px 20px;">
<h1 style="font-size:48px;">404</h1>
<p>Страница не найдена</p>
<p><a href="/">🏠 На главную</a> | <a href="/blog/">📝 Все статьи</a></p>
</article>
</BaseLayout>
-27
View File
@@ -1,27 +0,0 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="О проекте — ИЖС Дом" ogType="website">
<article>
<h1>О проекте ИЖС Дом</h1>
<p><strong>ИЖС Дом</strong> — экспертный ресурс о строительстве индивидуальных жилых домов.</p>
<h2>Наша миссия</h2>
<p>Мы помогаем будущим домовладельцам принимать взвешенные решения на каждом этапе строительства: от выбора участка до отделки фасада.</p>
<h2>Автор</h2>
<p>Статьи написаны практикующими специалистами в области строительства с опытом более 5 лет. Каждый материал проходит проверку на актуальность данных.</p>
<h2>Контакты</h2>
<p>Email: info@izhs-dom.ru</p>
<p>Телефон: +7 (347) 000-00-00</p>
<h2>Принципы</h2>
<ul>
<li>Только проверенная информация</li>
<li>Актуальные цены и технологии 2026 года</li>
<li>Прозрачность и отсутствие скрытой рекламы</li>
<li>E-E-A-T: опыт, экспертиза, авторитетность, доверие</li>
</ul>
</article>
</BaseLayout>
-44
View File
@@ -1,44 +0,0 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import Breadcrumbs from '../../components/Breadcrumbs.astro';
export async function getStaticPaths() {
const posts = import.meta.glob('/src/content/blog/*.md');
return Object.keys(posts).map((path) => {
const slug = path.replace('/src/content/blog/', '').replace('.md', '');
return { params: { slug } };
});
}
const { slug } = Astro.params;
const posts = import.meta.glob('/src/content/blog/*.md', { eager: true });
const postPath = `/src/content/blog/${slug}.md`;
const post = posts[postPath];
const frontmatter = post?.frontmatter || {};
const Content = post?.default;
const title = frontmatter.title || slug;
const description = frontmatter.description || title;
const date = frontmatter.date || '';
const related = frontmatter.related || [];
---
<BaseLayout
title={title}
description={description}
date={date}
slug={slug}
>
<article>
<Breadcrumbs />
{Content && <Content />}
</article>
{related.length > 0 && (
<div class="related">
<h3>Похожие статьи</h3>
{related.map((r) => {
const rSlug = r.split('/').filter(Boolean).pop() || r;
return <a href={`/blog/${rSlug}/`}>{rSlug.replace(/-/g, ' ')}</a>;
})}
</div>
)}
</BaseLayout>
-14
View File
@@ -1,14 +0,0 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
const posts = Object.entries(import.meta.glob('/src/content/blog/*.md', { eager: true }));
---
<BaseLayout title="Статьи — ИЖС Дом">
<article><h1>Статьи о строительстве</h1>
<ul>
{posts.map(([path, post]) => (
<li><a href={path.replace('/src/content/blog/', '/blog/').replace('.md', '/')}>
{post.frontmatter?.title || path}
</a></li>
))}
</ul></article>
</BaseLayout>
-31
View File
@@ -1,31 +0,0 @@
// JSON Feed для AI-агрегаторов (работает в dev и prod)
export const prerender = true;
const BASE = 'https://izhs-dom.ru';
const slugs = ['vybor-uchastka', 'fundament-dlya-doma', 'karkasnyj-dom', 'krovlya-doma', 'inzhenernye-sistemy', 'otdelka-fasada'];
const titles = {
'vybor-uchastka': 'Как выбрать участок под ИЖС',
'fundament-dlya-doma': 'Фундамент для дома — какой выбрать',
'karkasnyj-dom': 'Строительство каркасного дома',
'krovlya-doma': 'Кровля крыши — материалы и монтаж',
'inzhenernye-sistemy': 'Инженерные системы дома',
'otdelka-fasada': 'Отделка фасада деревянного дома',
};
export function GET() {
return new Response(JSON.stringify({
version: 'https://jsonfeed.org/version/1.1',
title: 'ИЖС Дом — статьи о строительстве',
home_page_url: BASE,
feed_url: `${BASE}/feed.json`,
language: 'ru',
items: slugs.map(s => ({
id: `${BASE}/blog/${s}/`,
url: `${BASE}/blog/${s}/`,
title: titles[s] || s,
date_published: '2026-05-31',
})),
}), {
headers: { 'Content-Type': 'application/feed+json; charset=utf-8' },
});
}
+198 -6
View File
@@ -1,10 +1,202 @@
--- ---
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from '../layouts/BaseLayout.astro';
--- ---
<BaseLayout title="ИЖС Дом — строительство домов">
<article> <BaseLayout title="GV Auto Collision — Professional Collision Repair in Los Angeles">
<h1>Строительство домов ИЖС</h1> <main>
<p>Экспертные статьи о строительстве индивидуальных жилых домов: от фундамента до крыши.</p> <!-- Hero Section -->
<p><a href="/blog/">📝 Все статьи →</a></p> <section class="hero">
</article> <div class="hero-content">
<h1>Got in an Accident? We'll Handle Everything.</h1>
<p class="hero-subtitle">Free photo estimate in 15 minutes. No insurance headaches. Just quality repairs.</p>
<div class="hero-cta">
<a href="#estimate" class="btn btn-primary">Get Free Photo Estimate</a>
<a href="tel:3106546484" class="btn btn-secondary">Call (310) 654-6484</a>
</div>
<div class="trust-badges">
<div class="badge">✓ Free Towing</div>
<div class="badge">✓ OEM Parts</div>
<div class="badge">✓ Written Warranty</div>
<div class="badge">✓ 15-Min Response</div>
</div>
</div>
<div class="hero-image">
<img src="/images/hero-repair.jpg" alt="GV Auto Collision repair shop" loading="eager" />
</div>
</section>
<!-- Trust Section -->
<section class="trust-section">
<h2>Why Choose GV Auto Collision?</h2>
<div class="trust-grid">
<div class="trust-card">
<div class="trust-icon">🛡️</div>
<h3>You Choose the Shop</h3>
<p>By law, you have the right to choose your repair shop. We fight for you, not the insurance company.</p>
</div>
<div class="trust-card">
<div class="trust-icon">🔍</div>
<h3>Hidden Damage Detection</h3>
<p>We find what adjusters miss. Full structural inspection to ensure your safety.</p>
</div>
<div class="trust-card">
<div class="trust-icon">🏭</div>
<h3>OEM Factory-Standard</h3>
<p>Only genuine parts. No shortcuts. Your car restored to original specifications.</p>
</div>
<div class="trust-card">
<div class="trust-icon">⚡</div>
<h3>Fast Turnaround</h3>
<p>Get back on the road faster. We coordinate with insurance to minimize your downtime.</p>
</div>
</div>
</section>
<!-- How It Works -->
<section class="process-section">
<h2>How It Works</h2>
<div class="process-steps">
<div class="step">
<div class="step-number">1</div>
<h3>Free Photo Estimate</h3>
<p>Send us photos of the damage. Get your estimate within 15 minutes.</p>
</div>
<div class="step">
<div class="step-number">2</div>
<h3>We Handle Insurance</h3>
<p>We manage the entire claim process. You don't have to fight adjusters.</p>
</div>
<div class="step">
<div class="step-number">3</div>
<h3>Expert Repair</h3>
<p>Our certified technicians restore your vehicle to factory standards.</p>
</div>
<div class="step">
<div class="step-number">4</div>
<h3>Quality Guaranteed</h3>
<p>Written warranty on all repairs. Drive with confidence.</p>
</div>
</div>
</section>
<!-- Before/After Gallery -->
<section class="gallery-section">
<h2>Real Results</h2>
<p class="section-subtitle">See the difference quality repair makes</p>
<div class="gallery-grid">
<div class="gallery-item">
<div class="gallery-before">
<img src="/images/before1.jpg" alt="Before repair - damaged SUV" />
<span class="gallery-label">Before</span>
</div>
<div class="gallery-after">
<img src="/images/after1.jpg" alt="After repair - restored SUV" />
<span class="gallery-label">After</span>
</div>
</div>
<div class="gallery-item">
<div class="gallery-before">
<img src="/images/before2.jpg" alt="Before repair - damaged vehicle" />
<span class="gallery-label">Before</span>
</div>
<div class="gallery-after">
<img src="/images/after2.jpg" alt="After repair - restored vehicle" />
<span class="gallery-label">After</span>
</div>
</div>
<div class="gallery-item">
<div class="gallery-before">
<img src="/images/before3.jpg" alt="Before repair - collision damage" />
<span class="gallery-label">Before</span>
</div>
<div class="gallery-after">
<img src="/images/after3.jpg" alt="After repair - like new" />
<span class="gallery-label">After</span>
</div>
</div>
</div>
</section>
<!-- Services -->
<section class="services-section">
<h2>Our Services</h2>
<div class="services-grid">
<div class="service-card">
<h3>Collision Repair</h3>
<p>Full structural and cosmetic repairs after accidents.</p>
</div>
<div class="service-card">
<h3>Paintless Dent Repair</h3>
<p>Remove dents without painting. Faster, cheaper, original finish preserved.</p>
</div>
<div class="service-card">
<h3>Frame Straightening</h3>
<p>Laser-guided alignment to factory specifications.</p>
</div>
<div class="service-card">
<h3>ADAS Calibration</h3>
<p>Safety sensor recalibration after repairs (75% of new cars need this).</p>
</div>
<div class="service-card">
<h3>Tesla & EV Repair</h3>
<p>Specialized repair for electric vehicles including battery systems.</p>
</div>
<div class="service-card">
<h3>Insurance Claims</h3>
<p>We handle the entire process. You focus on getting better.</p>
</div>
<div class="service-card">
<h3>Free Towing</h3>
<p>We pick up your vehicle from the accident scene at no cost.</p>
</div>
<div class="service-card">
<h3>Rental Coordination</h3>
<p>We coordinate with insurance for your rental car during repair.</p>
</div>
</div>
</section>
<!-- Estimate Form -->
<section id="estimate" class="estimate-section">
<h2>Get Your Free Photo Estimate</h2>
<p class="section-subtitle">Response within 15 minutes</p>
<form class="estimate-form" action="/api/estimate" method="POST">
<div class="form-row">
<input type="text" name="firstName" placeholder="First Name" required />
<input type="text" name="lastName" placeholder="Last Name" required />
</div>
<div class="form-row">
<input type="email" name="email" placeholder="Email" required />
<input type="tel" name="phone" placeholder="Phone" required />
</div>
<div class="form-row">
<input type="text" name="carMake" placeholder="Car Make (e.g., Toyota)" required />
<input type="text" name="carModel" placeholder="Car Model (e.g., Camry)" required />
<input type="text" name="carYear" placeholder="Year" required />
</div>
<div class="form-row">
<input type="text" name="damageType" placeholder="Damage Type (e.g., rear-end, side dent)" required />
</div>
<div class="form-row">
<textarea name="message" placeholder="Describe the damage or add details..." rows="4"></textarea>
</div>
<button type="submit" class="btn btn-primary btn-full">Submit for Free Estimate</button>
</form>
</section>
<!-- Contact Info -->
<section class="contact-section">
<div class="contact-grid">
<div class="contact-info">
<h2>Visit Us</h2>
<p class="address">794 Merchant St Unit 3<br />Los Angeles, CA 90021</p>
<a href="tel:3106546484" class="phone-link">(310) 654-6484</a>
<p class="hours">Open 7 Days a Week<br />Mon-Sun: 8:00 AM - 6:00 PM</p>
</div>
<div class="map-container">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3305.7!2d-118.23!3d34.04!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zMzTCsDAyJzI0LjAiTiAxMTjCsDEzJzQ4LjAiVw!5e0!3m2!1sen!2sus!4v1" allowfullscreen="" loading="lazy"></iframe>
</div>
</div>
</section>
</main>
</BaseLayout> </BaseLayout>
+57 -24
View File
@@ -1,37 +1,70 @@
// Генерирует llms.txt с правильным charset=utf-8 // LLMs.txt — описание сайта для AI-агентов и поисковых систем
export const prerender = true; export const prerender = true;
const content = `# ИЖС Дом — строительство индивидуальных жилых домов
> Экспертные статьи о строительстве ИЖС: от выбора участка до отделки. const BASE = 'https://www.gvautocollision.com';
> Сайт оптимизирован для AI-цитирования (Яндекс Нейро, ChatGPT Search, Perplexity).
## Основные разделы const content = `# GV Auto Collision
- [Главная](https://izhs-dom.ru): Общая информация о строительстве домов Professional collision repair shop in Los Angeles, CA.
- [Статьи](https://izhs-dom.ru/blog): 6 экспертных статей о строительстве
- [О проекте](https://izhs-dom.ru/about): Миссия, автор, контакты
## Статьи ## Services
- [Как выбрать участок под ИЖС](https://izhs-dom.ru/blog/vybor-uchastka): Категории земли, коммуникации, геология, юридическая проверка - Collision Repair (full structural and cosmetic)
- [Фундамент для дома — какой выбрать](https://izhs-dom.ru/blog/fundament-dlya-doma): Ленточный, плита, свайный, столбчатый — сравнение и цены - Paintless Dent Repair (PDR)
- [Строительство каркасного дома](https://izhs-dom.ru/blog/karkasnyj-dom): Этапы, цены 2026, мифы и факты - Frame Straightening (laser-guided alignment)
- [Кровля крыши — материалы и монтаж](https://izhs-dom.ru/blog/krovlya-doma): Металлочерепица, гибкая, керамическая, фальцевая - ADAS Calibration (safety sensor recalibration)
- [Инженерные системы дома](https://izhs-dom.ru/blog/inzhenernye-sistemy): Отопление, водоснабжение, канализация, электрика - Tesla & EV Repair
- [Отделка фасада деревянного дома](https://izhs-dom.ru/blog/otdelka-fasada): Материалы, цены, критерии выбора - Insurance Claims Management
- Free Towing from accident scene
- Rental Car Coordination
## Для разработчиков ## Why Choose Us
- Sitemap: [sitemap.xml](https://izhs-dom.ru/sitemap.xml) - Free photo estimate within 15 minutes
- JSON Feed: [feed.json](https://izhs-dom.ru/feed.json) - OEM factory-standard parts only
- Schema.org: Article + BreadcrumbList + Organization (sameAs Entity Linking) - Written warranty on all repairs
- Технологии: Astro 5, статическая генерация, SEO-оптимизация`; - We handle insurance claims for you
- 7 days a week, 8 AM - 6 PM
- Located at 794 Merchant St Unit 3, Los Angeles, CA 90021
## Contact
- Phone: (310) 654-6484
- Address: 794 Merchant St Unit 3, Los Angeles, CA 90021
- Open: Mon-Sun 8:00 AM - 6:00 PM
## Service Areas
Los Angeles, Beverly Hills, Malibu, Santa Monica, West LA, Downtown LA, Venice, Culver City, Brentwood, Pacific Palisades, Marina del Rey, Century City, Westwood, UCLA area.
## Key Differentiators
- You choose the shop (by law)
- We fight for your insurance payout
- Hidden damage detection
- No aftermarket parts
- Factory-spec restoration
## FAQ
### Do I have to go to my insurance-approved shop?
No. By law, you have the right to choose your repair shop. Your insurance cannot require you to go to a specific shop.
### Is the estimate really free?
Yes. Free photo estimate, no obligation. We respond within 15 minutes.
### What types of vehicles do you repair?
All makes and models: BMW, Mercedes, Audi, Porsche, Tesla, Lexus, Toyota, Honda, Ford, Chevrolet, Ferrari, Lamborghini, Rolls-Royce, and more.
### Do you offer a warranty?
Yes. Written warranty on all repairs. Drive with confidence.
### Do you handle insurance claims?
Yes. We manage the entire claim process — documentation, negotiation, and repair. You don't have to fight adjusters.
`;
export function GET() { export function GET() {
return new Response(content, { return new Response(content, {
headers: { headers: { 'Content-Type': 'text/plain; charset=utf-8' },
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600',
},
}); });
} }
+13 -22
View File
@@ -1,33 +1,24 @@
// RSS Feed для Яндекс.Дзен, Feedly, агрегаторов // RSS Feed для Google Business, агрегаторов
export const prerender = true; export const prerender = true;
const BASE = 'https://izhs-dom.ru'; const BASE = 'https://www.gvautocollision.com';
const slugs = ['vybor-uchastka', 'fundament-dlya-doma', 'karkasnyj-dom', 'krovlya-doma', 'inzhenernye-sistemy', 'otdelka-fasada'];
const titles = {
'vybor-uchastka': 'Как выбрать участок под ИЖС',
'fundament-dlya-doma': 'Фундамент для дома — какой выбрать',
'karkasnyj-dom': 'Строительство каркасного дома',
'krovlya-doma': 'Кровля крыши — материалы и монтаж',
'inzhenernye-sistemy': 'Инженерные системы дома',
'otdelka-fasada': 'Отделка фасада деревянного дома',
};
const items = slugs.map(s => ` <item> const items = ` <item>
<title>${titles[s]}</title> <title>GV Auto Collision — Professional Collision Repair in Los Angeles</title>
<link>${BASE}/blog/${s}/</link> <link>${BASE}/</link>
<guid>${BASE}/blog/${s}/</guid> <guid>${BASE}/</guid>
<pubDate>Sat, 31 May 2026 00:00:00 +0500</pubDate> <pubDate>Wed, 09 Aug 2026 00:00:00 +0000</pubDate>
<description>${titles[s]} — экспертная статья на ИЖС Дом</description> <description>Professional collision repair in Los Angeles. Free towing, OEM parts, written warranty. Get your free photo estimate in 15 minutes.</description>
</item>`).join('\n'); </item>`;
const rss = `<?xml version="1.0" encoding="UTF-8"?> const rss = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> <channel>
<title>ИЖС Дом — статьи о строительстве</title> <title>GV Auto Collision — Collision Repair Los Angeles</title>
<link>${BASE}</link> <link>${BASE}</link>
<description>Экспертные статьи о строительстве ИЖС: фундамент, каркас, кровля, инженерные системы</description> <description>Professional collision repair. Free towing. OEM parts. Written warranty. Serving Los Angeles, Beverly Hills, Malibu, Santa Monica, West LA.</description>
<language>ru</language> <language>en</language>
<lastBuildDate>Sat, 31 May 2026 00:00:00 +0500</lastBuildDate> <lastBuildDate>Wed, 09 Aug 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="${BASE}/rss.xml" rel="self" type="application/rss+xml"/> <atom:link href="${BASE}/rss.xml" rel="self" type="application/rss+xml"/>
${items} ${items}
</channel> </channel>
+6 -6
View File
@@ -1,17 +1,17 @@
// Генерирует sitemap.xml (работает в dev и prod) // Генерирует sitemap.xml (работает в dev и prod)
export const prerender = true; export const prerender = true;
const BASE = 'https://izhs-dom.ru'; const BASE = 'https://www.gvautocollision.com';
const pages = [ const pages = [
'', 'blog/', 'about/', '',
'blog/vybor-uchastka/', 'blog/fundament-dlya-doma/', '#estimate',
'blog/karkasnyj-dom/', 'blog/krovlya-doma/', '#services',
'blog/inzhenernye-sistemy/', 'blog/otdelka-fasada/', '#gallery',
]; ];
const xml = `<?xml version="1.0" encoding="UTF-8"?> const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${pages.map(p => ` <url><loc>${BASE}/${p}</loc><lastmod>2026-05-31</lastmod></url>`).join('\n')} ${pages.map(p => ` <url><loc>${BASE}${p}</loc><lastmod>2026-08-09</lastmod></url>`).join('\n')}
</urlset>`; </urlset>`;
export function GET() { export function GET() {