feat: implementar SEO completo com sitemap, robots.txt, JSON-LD schema e Google Search Console docs

This commit is contained in:
Erik
2025-12-03 17:37:41 -03:00
parent 16de9f48b8
commit 037072d297
5 changed files with 342 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# Octto Engenharia - SEO Configuration
# https://www.robotstxt.org/
User-agent: *
Allow: /
Disallow: /admin
Disallow: /api
Disallow: /*.pdf
Disallow: /*.jpg
# Specific crawlers
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
# Sitemap
Sitemap: https://octto-engenharia.com/sitemap.xml
Sitemap: https://octto-engenharia.com/en/sitemap.xml
Sitemap: https://octto-engenharia.com/es/sitemap.xml
# Crawl delay (optional)
Crawl-delay: 1

View File

@@ -8,6 +8,7 @@ import { LanguageProvider } from "@/contexts/LanguageContext";
import { ToastProvider } from "@/contexts/ToastContext";
import { ConfirmProvider } from "@/contexts/ConfirmContext";
import { ColorProvider } from "@/components/ColorProvider";
import { JsonLdScript } from "@/components/JsonLdScript";
const inter = Inter({
variable: "--font-body",
@@ -17,6 +18,47 @@ const inter = Inter({
export const metadata: Metadata = {
title: "Octto Engenharia | Movimentação de Carga e Segurança",
description: "Especialistas em engenharia de movimentação de carga, projetos de dispositivos de içamento, laudos técnicos e adequação de equipamentos (NR-11/NR-12).",
keywords: "engenharia, movimentação de carga, içamento, laudos técnicos, NR-11, NR-12, segurança do trabalho, projetos mecânicos",
metadataBase: new URL("https://octto-engenharia.com"),
openGraph: {
type: "website",
locale: "pt_BR",
url: "https://octto-engenharia.com",
siteName: "Octto Engenharia",
title: "Octto Engenharia | Movimentação de Carga e Segurança",
description: "Especialistas em engenharia de movimentação de carga, projetos de dispositivos de içamento, laudos técnicos e adequação de equipamentos.",
images: [
{
url: "https://octto-engenharia.com/og-image.jpg",
width: 1200,
height: 630,
alt: "Octto Engenharia",
},
],
},
twitter: {
card: "summary_large_image",
title: "Octto Engenharia | Movimentação de Carga e Segurança",
description: "Especialistas em engenharia de movimentação de carga",
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-snippet": -1,
"max-image-preview": "large",
"max-video-preview": -1,
},
},
alternates: {
languages: {
"pt-BR": "https://octto-engenharia.com/pt",
en: "https://octto-engenharia.com/en",
es: "https://octto-engenharia.com/es",
},
},
};
export default function RootLayout({
@@ -26,6 +68,9 @@ export default function RootLayout({
}>) {
return (
<html lang="pt-BR" suppressHydrationWarning>
<head>
<JsonLdScript />
</head>
<body
className={`${inter.variable} antialiased flex flex-col min-h-screen`}
>

View File

@@ -0,0 +1,59 @@
import { MetadataRoute } from 'next';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = 'https://octto-engenharia.com';
const locales = ['', '/en', '/es'];
// Páginas principais
const pages = [
{ url: '', changefreq: 'weekly', priority: 1 },
{ url: '/servicos', changefreq: 'monthly', priority: 0.8 },
{ url: '/projetos', changefreq: 'weekly', priority: 0.8 },
{ url: '/contato', changefreq: 'monthly', priority: 0.7 },
{ url: '/sobre', changefreq: 'monthly', priority: 0.7 },
{ url: '/privacidade', changefreq: 'yearly', priority: 0.5 },
{ url: '/termos', changefreq: 'yearly', priority: 0.5 },
];
// Buscar projetos do banco de dados
let projects = [];
try {
const res = await fetch(`${baseUrl}/api/projects`, {
next: { revalidate: 3600 }, // Cache por 1 hora
});
if (res.ok) {
projects = await res.json();
}
} catch (error) {
console.error('Erro ao buscar projetos para sitemap:', error);
}
// Gerar URLs
const sitemap: MetadataRoute.Sitemap = [];
// Adicionar páginas principais para cada locale
for (const locale of locales) {
for (const page of pages) {
sitemap.push({
url: `${baseUrl}${locale}${page.url}`,
lastModified: new Date(),
changeFrequency: page.changefreq as 'weekly' | 'monthly' | 'yearly',
priority: page.priority,
});
}
}
// Adicionar páginas de projetos específicos
for (const locale of locales) {
for (const project of projects) {
sitemap.push({
url: `${baseUrl}${locale}/projetos/${project.id}`,
lastModified: project.updatedAt ? new Date(project.updatedAt) : new Date(),
changeFrequency: 'monthly' as const,
priority: 0.6,
});
}
}
return sitemap;
}

View File

@@ -0,0 +1,82 @@
'use client';
export function JsonLdScript() {
const organizationSchema = {
'@context': 'https://schema.org',
'@type': 'LocalBusiness',
name: 'Octto Engenharia',
description: 'Especialistas em engenharia de movimentação de carga e segurança do trabalho',
url: 'https://octto-engenharia.com',
logo: 'https://octto-engenharia.com/logo.png',
image: 'https://octto-engenharia.com/og-image.jpg',
telephone: '+55 13 99803-0036',
email: 'contato@octto-engenharia.com',
areaServed: {
'@type': 'GeoShape',
addressCountry: 'BR',
},
sameAs: [
'https://www.instagram.com/octtoengenharia',
'https://www.linkedin.com/company/octto-engenharia',
],
address: {
'@type': 'PostalAddress',
addressCountry: 'BR',
addressLocality: 'Jundiaí',
addressRegion: 'SP',
},
priceRange: '$$',
serviceType: [
'Engenharia de movimentação de carga',
'Projetos de içamento',
'Laudos técnicos',
'Consultoria de segurança',
],
};
const navigationSchema = {
'@context': 'https://schema.org',
'@type': 'SiteNavigationElement',
'url': [
{
'@type': 'CollectionPage',
name: 'Projetos',
url: 'https://octto-engenharia.com/projetos',
description: 'Portfólio de projetos de engenharia de movimentação de carga',
},
{
'@type': 'CollectionPage',
name: 'Serviços',
url: 'https://octto-engenharia.com/servicos',
description: 'Serviços especializados em engenharia e segurança do trabalho',
},
{
'@type': 'AboutPage',
name: 'Sobre',
url: 'https://octto-engenharia.com/sobre',
description: 'Conheça mais sobre a Octto Engenharia',
},
{
'@type': 'ContactPage',
name: 'Contato',
url: 'https://octto-engenharia.com/contato',
description: 'Entre em contato com a Octto Engenharia',
},
],
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
suppressHydrationWarning
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(navigationSchema) }}
suppressHydrationWarning
/>
</>
);
}