Ilustrație pentru articolul: Cum să implementezi Schema.org LocalBusiness în AstroJS
:: Tehnologie :: DE TEODOR STANCU

Cum să implementezi Schema.org LocalBusiness în AstroJS

Ghid tehnic complet, pas cu pas, despre cum să injectezi date structurate JSON-LD validate pentru SEO Local direct în framework-ul AstroJS.

În SEO-ul modern, nu mai este suficient ca un site să “arate bine”. Motoarele de căutare (și LLM-urile din spate) trebuie să poată citi structura datelor tale pentru a construi relații semantice solide (Entity-Based SEO).

Cea mai rapidă metodă de a transforma un simplu site de o pagină într-o entitate recunoscută de Google este implementarea de date structurate Schema.org sub format JSON-LD.

Pentru fondatorii de business-uri locale (săli de fitness, restaurante, cabinete medicale, agenții), markup-ul de tip LocalBusiness este diferența dintre a exista pe pagina 4 și a domina Google Maps Local Pack (pachetul de 3 rezultate locale).

În acest tutorial, îți voi arăta cum să construiești un generator simplu și cum să injectezi acest cod în arhitectura extrem de fluidă din AstroJS.

💡 Vrei codul direct? Am construit un Generator JSON-LD LocalBusiness Gratuit chiar aici pe site. Completează detaliile și dă copy-paste.


De ce AstroJS și JSON-LD sunt o pereche perfectă?

AstroJS este renumit pentru filosofia sa Zero-JS by default. Asta înseamnă că tot ce construiești este randat la nivel de server (Static Site Generation), trimițând către browser doar HTML pur, rapid. Codul JSON-LD devine, astfel, parte integrantă din structura nativă a paginii înainte ca Googlebot să înceapă procesul de randare (spre deosebire de SPA-urile din React/Vue tradiționale, unde crawler-ul trebuie să execute JavaScript pentru a “vedea” datele).

Pasul 1: Construirea Obiectului JSON

Prima regulă a datelor structurate: JSON-ul trebuie să fie valid. În Astro, cel mai curat mod de a face acest lucru este să definești datele direct în secțiunea Frontmatter (între --- și ---) dintr-un fișier .astro.

---
// src/layouts/Layout.astro sau src/pages/index.astro

const localBusinessSchema = {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": "Numele Afacerii Tale",
    "image": "https://exemplu.ro/logo-oficial.jpg",
    "@id": "https://exemplu.ro/#localbusiness",
    "url": "https://exemplu.ro",
    "telephone": "+40700000000",
    "priceRange": "$$",
    "address": {
        "@type": "PostalAddress",
        "streetAddress": "Bulevardul Principal, Nr. 12",
        "addressLocality": "București",
        "postalCode": "010101",
        "addressCountry": "RO"
    },
    // Opțional: Programe de lucru
    "openingHoursSpecification": [
        {
            "@type": "OpeningHoursSpecification",
            "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
            "opens": "09:00",
            "closes": "18:00"
        }
    ]
};
---

Pasul 2: Injectarea în <head> cu set:html

Acum că avem obiectul JSON pregătit (care poate trage inclusiv date dinamice din CMS-ul tău sau din Colecțiile de Conținut Astro), trebuie să-l integrăm printre tag-urile meta, in <head>.

Astro ne oferă un directiv magic numit set:html. Acesta îi spune compilatorului: “Hei, validează string-ul ăsta și bagă-l ca HTML brut direct aici, fără să-l evapezi (sanitize)”.

<!DOCTYPE html>
<html lang="ro">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width" />
        <title>Nume Site</title>
        
        <!-- Injectarea Schema.org -->
        <script 
            type="application/ld+json" 
            set:html={JSON.stringify(localBusinessSchema)} 
        />
    </head>
    <body>
        <slot />
    </body>
</html>

Atât e de simplu! JSON.stringify(localBusinessSchema) ia obiectul tău JavaScript, îl convertește într-un string valid JSON, și set:html îl plasează perfect între tag-urile <script>.

Pasul 3: Crearea unei Componente Reutilizabile (Opțional, dar recomandat)

Dacă vrei să fii cu adevărat profesionist și să ai o arhitectură curată, poți scoate logica asta într-o componentă separată SchemaOrg.astro, pe care o pasezi apoi în Layout.astro.

src/components/SchemaLocal.astro

---
interface Props {
    name: string;
    url: string;
    description: string;
    city: string;
    // ...alte proprietăți
}

const { name, url, description, city } = Astro.props;

const schema = {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": name,
    "url": url,
    "description": description,
    "address": {
        "@type": "PostalAddress",
        "addressLocality": city,
        "addressCountry": "RO"
    }
};
---

<script type="application/ld+json" set:html={JSON.stringify(schema)} />

Și în paginile tale:

---
import SchemaLocal from '../components/SchemaLocal.astro';
---
<head>
    <!-- Alte meta tag-uri... -->
    <SchemaLocal 
        name="Restaurant La Stejar"
        url="https://lastejar.ro"
        description="Cel mai bun restaurant tradițional."
        city="Sibiu"
    />
</head>

Cum verifici dacă funcționează?


title: “Cum să implementezi Schema.org LocalBusiness în AstroJS” description: “Ghid tehnic complet, pas cu pas, despre cum să injectezi date structurate JSON-LD validate pentru SEO Local direct în framework-ul AstroJS.” date: “2024-03-15” image: ”../../../src/assets/blog/Schema-Markup.webp” category: “Tehnologie” categorySlug: “seo-local” tags: [“SEO Tehnic”, “AstroJS”, “Local SEO”, “JSON-LD”]

În SEO-ul modern, nu mai este suficient ca un site să “arate bine”. Motoarele de căutare (și LLM-urile din spate) trebuie să poată citi structura datelor tale pentru a construi relații semantice solide (Entity-Based SEO).

Cea mai rapidă metodă de a transforma un simplu site de o pagină într-o entitate recunoscută de Google este implementarea de date structurate Schema.org sub format JSON-LD.

Pentru fondatorii de business-uri locale (săli de fitness, restaurante, cabinete medicale, agenții), markup-ul de tip LocalBusiness este diferența dintre a exista pe pagina 4 și a domina Google Maps Local Pack (pachetul de 3 rezultate locale).

În acest tutorial, îți voi arăta cum să construiești un generator simplu și cum să injectezi acest cod în arhitectura extrem de fluidă din AstroJS.

💡 Vrei codul direct? Am construit un Generator JSON-LD LocalBusiness Gratuit chiar aici pe site. Completează detaliile și dă copy-paste.


De ce AstroJS și JSON-LD sunt o pereche perfectă?

AstroJS este renumit pentru filosofia sa Zero-JS by default. Asta înseamnă că tot ce construiești este randat la nivel de server (Static Site Generation), trimițând către browser doar HTML pur, rapid. Codul JSON-LD devine, astfel, parte integrantă din structura nativă a paginii înainte ca Googlebot să înceapă procesul de randare (spre deosebire de SPA-urile din React/Vue tradiționale, unde crawler-ul trebuie să execute JavaScript pentru a “vedea” datele).

Pasul 1: Construirea Obiectului JSON

Prima regulă a datelor structurate: JSON-ul trebuie să fie valid. În Astro, cel mai curat mod de a face acest lucru este să definești datele direct în secțiunea Frontmatter (între --- și ---) dintr-un fișier .astro.

---
// src/layouts/Layout.astro sau src/pages/index.astro

const localBusinessSchema = {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": "Numele Afacerii Tale",
    "image": "https://exemplu.ro/logo-oficial.jpg",
    "@id": "https://exemplu.ro/#localbusiness",
    "url": "https://exemplu.ro",
    "telephone": "+40700000000",
    "priceRange": "$$",
    "address": {
        "@type": "PostalAddress",
        "streetAddress": "Bulevardul Principal, Nr. 12",
        "addressLocality": "București",
        "postalCode": "010101",
        "addressCountry": "RO"
    },
    // Opțional: Programe de lucru
    "openingHoursSpecification": [
        {
            "@type": "OpeningHoursSpecification",
            "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
            "opens": "09:00",
            "closes": "18:00"
        }
    ]
};
---

Pasul 2: Injectarea în <head> cu set:html

Acum că avem obiectul JSON pregătit (care poate trage inclusiv date dinamice din CMS-ul tău sau din Colecțiile de Conținut Astro), trebuie să-l integrăm printre tag-urile meta, in <head>.

Astro ne oferă un directiv magic numit set:html. Acesta îi spune compilatorului: “Hei, validează string-ul ăsta și bagă-l ca HTML brut direct aici, fără să-l evapezi (sanitize)”.

<!DOCTYPE html>
<html lang="ro">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width" />
        <title>Nume Site</title>
        
        <!-- Injectarea Schema.org -->
        <script 
            type="application/ld+json" 
            set:html={JSON.stringify(localBusinessSchema)} 
        />
    </head>
    <body>
        <slot />
    </body>
</html>

Atât e de simplu! JSON.stringify(localBusinessSchema) ia obiectul tău JavaScript, îl convertește într-un string valid JSON, și set:html îl plasează perfect între tag-urile <script>.

Pasul 3: Crearea unei Componente Reutilizabile (Opțional, dar recomandat)

Dacă vrei să fii cu adevărat profesionist și să ai o arhitectură curată, poți scoate logica asta într-o componentă separată SchemaOrg.astro, pe care o pasezi apoi în Layout.astro.

src/components/SchemaLocal.astro

---
interface Props {
    name: string;
    url: string;
    description: string;
    city: string;
    // ...alte proprietăți
}

const { name, url, description, city } = Astro.props;

const schema = {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": name,
    "url": url,
    "description": description,
    "address": {
        "@type": "PostalAddress",
        "addressLocality": city,
        "addressCountry": "RO"
    }
};
---

<script type="application/ld+json" set:html={JSON.stringify(schema)} />

Și în paginile tale:

---
import SchemaLocal from '../components/SchemaLocal.astro';
---
<head>
    <!-- Alte meta tag-uri... -->
    <SchemaLocal 
        name="Restaurant La Stejar"
        url="https://lastejar.ro"
        description="Cel mai bun restaurant tradițional."
        city="Sibiu"
    />
</head>

Cum verifici dacă funcționează?

După ce rulezi npm run build sau npm run dev, inspectează codul sursă al paginii (CTRL+U). Ar trebui să vezi acel tag <script> bine format.

Pentru a fi 100% sigur că Google vede și apreciază munca ta, folosește Rich Results Test de la Google. Aruncă URL-ul tău acolo sau dă copy-paste la codul HTML brut, iar Google îți va valida obiectele găsite.

🛠️ Nu ai chef să scrii JSON-ul manual? Încearcă Generatorul nostru gratuit Schema.org LocalBusiness direct aici pe Nereteus.com.