refactor: remove manual page metadata and standardize SEO schema with dynamic dates and images

This commit is contained in:
Lucas Rayan committed 2026-08-26 09:54:17 -03:00
1 parent 574536d70b
commit e347a95dd6
3 files changed
+49 -20

No files matched your search

+39
View File
@@ -0,0 +1,39 @@
import { paginaMeta, jsonLd } from "@/lib/seo";
export const metadata = paginaMeta({
titulo: "Frameworks & SDKs para ESP32: Guia Completo e Comparativo",
descricao: "Guia completo de desenvolvimento: ESP-IDF, ESP-RainMaker, ESP-Matter, Rust, ESP-ADF, ESP-SR, ESP-WHO, Arduino e MicroPython com exemplos de código.",
caminho: "/frameworks",
keywords: [
"ESP-IDF",
"ESP-RainMaker",
"ESP-Matter",
"Rust ESP32",
"ESP-SR",
"ESP-ADF",
"ESP-IoT-Solution",
"Arduino ESP32",
"MicroPython ESP32",
"frameworks ESP32",
"programar ESP32",
],
});
export default function FrameworksLayout({ children }) {
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(
jsonLd.trilha([
{ nome: "Início", caminho: "/" },
{ nome: "Frameworks", caminho: "/frameworks" },
])
),
}}
/>
{children}
</>
);
}
-20
View File
@@ -1,4 +1,3 @@
import { paginaMeta } from "@/lib/seo";
import Header from "@/components/Header"; import Header from "@/components/Header";
import Footer from "@/components/Footer"; import Footer from "@/components/Footer";
import Link from "next/link"; import Link from "next/link";
@@ -25,25 +24,6 @@ import {
Mic Mic
} from "lucide-react"; } from "lucide-react";
export const metadata = paginaMeta({
titulo: "Frameworks & SDKs para ESP32: Guia Completo e Comparativo",
descricao: "Guia completo de desenvolvimento: ESP-IDF, ESP-RainMaker, ESP-Matter, Rust, ESP-ADF, ESP-SR, ESP-WHO, Arduino e MicroPython com exemplos de código.",
caminho: "/frameworks",
keywords: [
"ESP-IDF",
"ESP-RainMaker",
"ESP-Matter",
"Rust ESP32",
"ESP-SR",
"ESP-ADF",
"ESP-IoT-Solution",
"Arduino ESP32",
"MicroPython ESP32",
"frameworks ESP32",
"programar ESP32"
],
});
export default function Frameworks() { export default function Frameworks() {
const frameworks = Object.entries(frameworksData); const frameworks = Object.entries(frameworksData);
+10
View File
@@ -113,6 +113,10 @@ export const jsonLd = {
prop("ESP-IDF mínimo", serie.esp_idf_minimo), prop("ESP-IDF mínimo", serie.esp_idf_minimo),
].filter(Boolean); ].filter(Boolean);
const imagem = serie.placa
? `${SITE.url}${serie.placa}`
: `${SITE.url}/opengraph-image.png`;
return { return {
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "TechArticle", "@type": "TechArticle",
@@ -120,7 +124,10 @@ export const jsonLd = {
headline: `${serie.nome_completo || chave}: especificações e pinagem`, headline: `${serie.nome_completo || chave}: especificações e pinagem`,
name: `${serie.nome_completo || chave} - Documentação Técnica e Especificações`, name: `${serie.nome_completo || chave} - Documentação Técnica e Especificações`,
description: serie.descricao, description: serie.descricao,
image: [imagem],
inLanguage: "pt-BR", inLanguage: "pt-BR",
datePublished: "2026-08-25T00:00:00.000Z",
dateModified: new Date().toISOString(),
mainEntityOfPage: `${SITE.url}/series/${chave}`, mainEntityOfPage: `${SITE.url}/series/${chave}`,
url: `${SITE.url}/series/${chave}`, url: `${SITE.url}/series/${chave}`,
author: { author: {
@@ -155,7 +162,10 @@ export const jsonLd = {
headline: `${framework.nome} para ESP32: Guia e Documentação`, headline: `${framework.nome} para ESP32: Guia e Documentação`,
name: `${framework.nome_completo || framework.nome} para ESP32`, name: `${framework.nome_completo || framework.nome} para ESP32`,
description: framework.descricao, description: framework.descricao,
image: [`${SITE.url}/opengraph-image.png`],
inLanguage: "pt-BR", inLanguage: "pt-BR",
datePublished: "2026-08-25T00:00:00.000Z",
dateModified: new Date().toISOString(),
mainEntityOfPage: `${SITE.url}/frameworks/${encodeURIComponent(chave)}`, mainEntityOfPage: `${SITE.url}/frameworks/${encodeURIComponent(chave)}`,
url: `${SITE.url}/frameworks/${encodeURIComponent(chave)}`, url: `${SITE.url}/frameworks/${encodeURIComponent(chave)}`,
author: { author: {