astudio · Marcação Schema
<root> = dois níveis acima do diretório base desta skill. Lint: <root>/scripts/schema_lint.py. Status dos tipos:
<root>/reference/facts.md § Status dos rich results.
Dados estruturados não são obrigatórios para respostas de IA (o Google afirma isso), mas definem fatos de forma inequívoca: quem você é, quanto custa o produto, onde você está, quem escreveu o artigo. Isso ajuda rich results, knowledge panels e qualquer consumidor que leia JSON-LD. Só ajuda quando corresponde ao que a página exibe.
Fluxo de trabalho
- Inventariar os templates de página (home, categoria, produto, artigo, contatos, eventos, vagas).
- Fazer lint do que existe:
schema_lint.py <url>por template. - Escolher os tipos por template (tabela abaixo). Um
@graphpor página; atribuir valores estáveis de@id(https://site.ru/#organization) e referenciá-los em vez de repetir. - Escrever o JSON-LD a partir da mesma fonte de dados da página (campos do CMS), nunca copiando números manualmente.
- Validar:
schema_lint.py, depois Google Rich Results Test e Schema Markup Validator, e para a Rússia o validador de microdados do Yandex Webmaster. Colar os resultados no relatório. - Mostrar o diff; fazer deploy após um sim.
Tipos por template
| Template | Tipos | Deve corresponder à página |
|---|---|---|
| Home | Organization (ou subtipo LocalBusiness), WebSite | name, logo, contatos; sameAs para perfis oficiais (VK, Telegram, Яндекс Карты, 2ГИС, Wikipedia) |
| Produto | Product + Offer (+ AggregateRating, Review se exibidos) | price, currency RUB, availability, rating value e count |
| Categoria | BreadcrumbList, ItemList (opcional) | texto do breadcrumb |
| Artigo / blog | Article/BlogPosting + Person (autor) | headline, nome do autor com página de perfil, datas |
| Contatos / filial | subtipo LocalBusiness com address, geo, openingHoursSpecification, telephone | o mesmo NAP dos mapas e diretórios |
| Página de vídeo | VideoObject | thumbnail, data de upload, duração |
| Eventos / cursos / empregos | Event, Course, JobPosting | datas, preço, localização, salário |
| Página de fórum Q&A | QAPage | perguntas e respostas reais de usuários |
Tipos aposentados ou sem efeito (não os venda como vantagens)
FAQPage (sem rich result do Google desde 2026-05-07), HowTo (2023), ClaimReview, EstimatedSalary, Learning Video, SpecialAnnouncement, Vehicle Listing, Book Actions (2025-06-12). Mantenha FAQPage/HowTo apenas se espelharem conteúdo visível e alguém os consumir; informe que não há efeito no SERP do Google.
Regras
- Marcar apenas o que os usuários podem ver. Avaliações ocultas, autoavaliações tendenciosas da própria organização e preços diferentes dos da página violam a política do Google e podem gerar uma ação manual.
- Preços: número sem espaços em
price("4990"),priceCurrency: "RUB"; exibir o mesmo preço no HTML. - Datas em ISO 8601 com fuso horário (
2026-11-06T10:00:00+03:00). - Uma entidade de organização por site, referenciada por
@id.
Exemplo: LocalBusiness
{"@context":"https://schema.org","@graph":[{"@type":"CafeOrCoffeeShop","@id":"https://zerno.ru/#org",
"name":"Кофейня «Зерно»","url":"https://zerno.ru/","logo":"https://zerno.ru/logo.svg","telephone":"+7 843 000-00-00",
"address":{"@type":"PostalAddress","streetAddress":"ул. Баумана, 1","addressLocality":"Казань","postalCode":"420111","addressCountry":"RU"},
"geo":{"@type":"GeoCoordinates","latitude":55.7887,"longitude":49.1221},
"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],"opens":"08:00","closes":"22:00"}],
"sameAs":["https://vk.com/zerno","https://yandex.ru/maps/org/000"]}]}