refactor: remove manual page metadata and standardize SEO schema with dynamic dates and images
This commit is contained in:
1 parent
574536d70b
commit
e347a95dd6
3 files changed
+49
-20
No files matched your search
@@ -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}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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
@@ -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: {
|
||||||
|
|||||||
Reference in new issue
Block a user