Skills Agentes

Blog Schema

Genera schema JSON-LD completo para posts con Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject y FAQPage opcional, validado contra los requisitos de Google y con avisos sobre tipos retirados.

Estrellas
2.1k

en todo el repo

Actividad
55

0–100, la ruta de este skill

Actualizado
el mes pasado

último commit aquí

Commits
4

últimos 90 días

Contexto
2.7k tok

84 tok en reposo

Paquete
1 archivo

10 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add AgriciDaniel/claude-blog --skill blog-schema --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests.

Qué hace

  • Combina todas las entidades en un solo `<script>` con patrón `@graph` y referencias `@id` estables entre ellas
  • Construye el JSON con un codificador real, nunca por interpolación de cadenas, y escapa `</` y `<` antes de incrustarlo en HTML
  • Avisa de que Google retiró los resultados enriquecidos de FAQ el 2026-05-07: FAQPage solo como marcado de entidad cuando hay un FAQ visible y útil
  • Valida que las referencias `@id` resuelvan, que `dateModified` no sea anterior a `datePublished`, que las URLs sean absolutas y que el breadcrumb sea correlativo
  • Añade un VideoObject por cada vídeo de YouTube incrustado y un ImageObject para la imagen principal

Úsalo cuando

  • El usuario dice "schema", "json-ld", "datos estructurados" o "marcado schema"

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Genera el schema de este post
    • Añade JSON-LD de Article y Organization a este artículo

    SKILL.md

    En inglés

    Blog Schema: JSON-LD Structured Data Generation

    Generates complete, validated JSON-LD schema markup for blog posts using the @graph pattern. Combines multiple schema types into a single script tag with stable @id references for entity linking.

    Workflow

    Step 1: Read Content

    Read the blog post and extract all schema-relevant data:

    • Title (headline)
    • Author (name, job title, social links, credentials)
    • Dates (datePublished, dateModified / lastUpdated)
    • Description (meta description)
    • FAQ section (question and answer pairs)
    • Images (cover image URL, dimensions, alt text; inline images)
    • Organization info (site name, URL, logo)
    • Word count (approximate from content length)
    • Tags/categories (for BreadcrumbList category)
    • Slug (from filename or frontmatter)

    Step 2: Generate BlogPosting Schema

    Complete BlogPosting with recommended properties when applicable:

    {
      "@type": "BlogPosting",
      "@id": "{siteUrl}/blog/{slug}#article",
      "headline": "Concise post title",
      "description": "Concise page-specific meta description",
      "datePublished": "YYYY-MM-DD",
      "dateModified": "YYYY-MM-DD",
      "author": { "@id": "{siteUrl}/author/{author-slug}#person" },
      "publisher": { "@id": "{siteUrl}#organization" },
      "image": { "@id": "{siteUrl}/blog/{slug}#primaryimage" },
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "{siteUrl}/blog/{slug}"
      },
      "wordCount": 2400,
      "articleBody": "First 200 characters of content as excerpt..."
    }
    

    Google's Article structured data docs do not define required Article properties. Include headline, datePublished, author, publisher, and image when applicable, validate with the Rich Results Test, and treat missing fields as warnings unless the target surface requires them. Recommended properties: description, dateModified, mainEntityOfPage, wordCount, articleBody (excerpt).

    Step 3: Generate Person Schema

    Author schema with stable @id for cross-referencing:

    {
      "@type": "Person",
      "@id": "{siteUrl}/author/{author-slug}#person",
      "name": "Author Name",
      "jobTitle": "Role or Title",
      "url": "{siteUrl}/author/{author-slug}",
      "sameAs": [
        "https://twitter.com/handle",
        "https://linkedin.com/in/handle",
        "https://github.com/handle"
      ]
    }
    

    Optional properties (include when available):

    • alumniOf - Educational institution (Organization type)
    • worksFor - Employer (reference to Organization @id if same entity)

    Step 4: Generate Organization Schema

    Blog's parent organization entity:

    {
      "@type": "Organization",
      "@id": "{siteUrl}#organization",
      "name": "Organization Name",
      "url": "{siteUrl}",
      "logo": {
        "@type": "ImageObject",
        "url": "{siteUrl}/logo.png",
        "width": 600,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/org",
        "https://linkedin.com/company/org",
        "https://github.com/org"
      ]
    }
    

    Logo requirements: use a valid crawlable image URL and follow the active Organization and Article documentation for the target surface. Do not invent hard logo dimensions unless the project or current docs require them.

    Step 5: Generate BreadcrumbList

    Navigation breadcrumb schema showing content hierarchy:

    {
      "@type": "BreadcrumbList",
      "@id": "{siteUrl}/blog/{slug}#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "{siteUrl}"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Category Name",
          "item": "{siteUrl}/blog/category/{category-slug}"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Post Title",
          "item": "{siteUrl}/blog/{slug}"
        }
      ]
    }
    

    If no category is available, use "Blog" as the second breadcrumb item with {siteUrl}/blog as the URL.

    Step 6: Generate FAQPage Entity Schema (Optional)

    Extract Q&A pairs from the blog post's FAQ section:

    {
      "@type": "FAQPage",
      "@id": "{siteUrl}/blog/{slug}#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "What is the question?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "The complete visible answer text."
          }
        }
      ]
    }
    

    Google retired FAQ rich results for all sites on 2026-05-07. FAQPage is not a Google rich-result or generative-AI optimization path, and it earns no SEO or AI-readiness credit. Only emit it when a visible FAQ genuinely helps readers, with at least one valid Question and matching visible answer. Do not pad an answer to a target length or add an FAQ solely for markup.

    Do not substitute QAPage. Google supports QAPage for a page focused on one question where users can submit answers. Editorial FAQs, support FAQs, and blog Q&A sections do not meet that model.

    Step 7: Generate VideoObject (if videos present)

    For each YouTube video embedded in the post, generate a VideoObject schema:

    {
      "@type": "VideoObject",
      "@id": "{siteUrl}/blog/{slug}#video-{index}",
      "name": "Video title",
      "description": "Video description excerpt (first 200 chars)",
      "thumbnailUrl": "https://img.youtube.com/vi/{videoId}/hqdefault.jpg",
      "uploadDate": "{ISO 8601 date}",
      "contentUrl": "https://www.youtube.com/watch?v={videoId}",
      "embedUrl": "https://www.youtube.com/embed/{videoId}",
      "duration": "PT{M}M{S}S",
      "interactionStatistic": {
        "@type": "InteractionCounter",
        "interactionType": { "@type": "WatchAction" },
        "userInteractionCount": {viewCount}
      }
    }
    

    Add each VideoObject to the @graph array. Use #video-1, #video-2 etc. for the @id fragment. Extract video metadata from the embed's noscript fallback or from YouTube Data API if available via blog-google.

    Step 7.5: Generate ImageObject

    Cover image schema for the post's primary image:

    {
      "@type": "ImageObject",
      "@id": "{siteUrl}/blog/{slug}#primaryimage",
      "url": "https://cdn.pixabay.com/photo/.../image.jpg",
      "width": 1200,
      "height": 630,
      "caption": "Descriptive caption matching alt text"
    }
    

    Image requirements:

    • URL must be crawlable and publicly accessible
    • Width and height should reflect actual image dimensions
    • Caption should match or closely align with the image alt text
    • Preferred dimensions: 1200x630 (OG-compatible) or 1920x1080

    Step 8: Validate & Warn

    Check per-surface support before recommending schema types:

    Type Google Search status Valid entity/context use
    HowTo No current Google rich-result experience Valid schema.org type for genuine how-to content
    Dataset Used by Dataset Search, not general Google Search rich results Valid only for an actual dataset
    QAPage Supported for one question with user-submitted answers Do not use for editorial FAQ content
    Course Course list remains distinct from the retired Course Info experience Use only when the current Course list documentation and visible content match
    ClaimReview, SpecialAnnouncement, Course Info, Estimated Salary, Learning Video, Vehicle Listing Former Google Search experiences; support was retired May remain schema.org-valid, but never recommend them for Google eligibility
    PracticeProblem Removed from Google Search and its documentation Do not recommend for Google eligibility
    Sitelinks Search Box No dedicated Google Search visual element Google generates sitelinks algorithmically

    Validation checks:

    1. All @id references resolve to entities within the @graph
    2. dateModified is equal to or after datePublished
    3. headline is concise. Warn when it may truncate or becomes unclear
    4. description is concise, page-specific, and not duplicated across posts
    5. All URLs are absolute (not relative)
    6. Image dimensions are positive integers
    7. BreadcrumbList positions are sequential starting from 1
    8. If FAQPage is emitted, visible Q&A content exists and includes at least 1 valid Question

    Generative AI note: Structured data is not required for Google generative AI search, and there is no special AI schema. Prioritize accurate, visible-content-consistent Article/BlogPosting, Person, Organization, and BreadcrumbList entities. Add ImageObject or VideoObject when the assets exist. FAQPage remains optional reader-facing markup and adds no Google AI advantage.

    Step 9: Output

    Combine all schemas into a single <script> tag using the @graph pattern:

    Security requirement: build the JSON-LD with a real JSON encoder, never string interpolation. Before embedding in HTML, make the JSON text script-safe by escaping closing script sequences and literal less-than characters, for example replace </ with <\/ and < with \u003c. User-controlled fields such as headline, description, author name, image URL, and breadcrumb labels must only enter the block as JSON-encoded values.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@graph": [
        { "@type": "BlogPosting", ... },
        { "@type": "Person", ... },
        { "@type": "Organization", ... },
        { "@type": "BreadcrumbList", ... },
        { "@type": "FAQPage", ... },
        { "@type": "VideoObject", ... },
        { "@type": "ImageObject", ... }
      ]
    }
    </script>
    

    @graph pattern benefits:

    • Single script tag instead of multiple - cleaner HTML
    • Entity linking via stable @id references (e.g., author references Person by @id)
    • Google and AI systems parse @graph arrays correctly
    • Easier to maintain and update as a single block

    Output options:

    • Embedded HTML - Ready to paste into <head> or before </body>
    • Standalone JSON - For CMS schema fields or API injection
    • MDX component - If the project uses MDX, wrap in a component

    Save the generated schema to the blog post file or to a separate schema file as the user prefers.

    Google can process JSON-LD generated by JavaScript when it is present in the rendered DOM. Server-rendered markup is still more portable for non-Google crawlers, but source-only JSON-LD is not a Google requirement. For dynamic markup, validate the rendered URL, confirm the values match visible content, and avoid delayed or failed client requests that leave the rendered DOM empty.

    Reproducido de AgriciDaniel/claude-blog bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Categoría
    SEO y GEO
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de AgriciDaniel/claude-blog

    Este repo incluye 33 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack claude-blog entero y su comando de instalación

    Blog

    2.1k

    Motor de blog de ciclo completo con 31 subskills, 12 plantillas, puntuación sobre 100 y 5 agentes. Enruta cada petición a la subskill correcta: escribir, reescribir, analizar, auditar, schema, clusters y publicación multilingüe.

    Costo de contexto al activarse
    6.2k tok
    Tamaño del paquete
    35 archivos
    Última actualización
    hace 19 días
    seo geo

    Integración con las APIs de Google para rendimiento de blog: PageSpeed Insights, CrUX con 25 semanas de histórico, Search Console, URL Inspection, Indexing API, GA4, NLP de entidades, YouTube y Keyword Planner.

    Costo de contexto al activarse
    3.3k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 19 días
    seo geo

    Consulta cuadernos de Google NotebookLM para obtener respuestas ancladas en tus propios documentos y con citas: gestiona la biblioteca de cuadernos, la autenticación con Google y el descubrimiento de contenido.

    Costo de contexto al activarse
    2.5k tok
    Tamaño del paquete
    15 archivos
    Última actualización
    hace 19 días
    investigacion

    Genera narración en audio de posts con Google Gemini TTS: resumen hablado, lectura completa o diálogo tipo pódcast a dos voces, con 30 voces y salida MP3 más el código de inserción HTML5.

    Costo de contexto al activarse
    2.2k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 19 días
    redaccion contenido

    Generación y edición de imágenes con IA para contenido de blog mediante Gemini por MCP: portadas, ilustraciones, tarjetas sociales y OG, con 6 modos de dominio y retorno silencioso si el MCP no está disponible.

    Costo de contexto al activarse
    3.4k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 19 días
    redaccion contenido

    Motor de clusters temáticos semánticos: investiga keywords desde el SERP, agrupa por intención y solapamiento, construye una arquitectura hub-and-spoke, genera un mapa SVG y ejecuta el cluster llamando a blog-write.

    Costo de contexto al activarse
    4.9k tok
    Tamaño del paquete
    4 archivos
    Última actualización
    hace 19 días
    seo geo

    Skills relacionados

    Blog

    2.1k

    Motor de blog de ciclo completo con 31 subskills, 12 plantillas, puntuación sobre 100 y 5 agentes. Enruta cada petición a la subskill correcta: escribir, reescribir, analizar, auditar, schema, clusters y publicación multilingüe.

    Costo de contexto al activarse
    6.2k tok
    Tamaño del paquete
    35 archivos
    Última actualización
    hace 19 días
    seo geo

    Evaluación de salud de todo el blog: revisa cada archivo buscando puntuaciones de calidad, páginas huérfanas, canibalización, contenido obsoleto y preparación para citas de IA, y devuelve una cola de acciones priorizada.

    Costo de contexto al activarse
    2.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    seo geo

    Genera briefs de contenido detallados: keywords objetivo, esquema, análisis competitivo, estadísticas recomendadas, sugerencias de imágenes y gráficos, arquitectura de enlaces internos, plantilla recomendada y plan de distribución.

    Costo de contexto al activarse
    3.3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    seo geo