Pular para o conteúdo

Metadados de SEO

Quatro rotas, dois níveis: por post (título, descrição, canonical, indexação, tipo de schema) e do site inteiro (os padrões e templates que toda página herda).

Método Caminho Escopo
GET /v1/posts/{reference}/seo seo:read
PATCH /v1/posts/{reference}/seo seo:write
GET /v1/sites/me/seo seo:read
PATCH /v1/sites/me/seo seo:write

Leitura e escrita são escopos separados: uma chave que lê SEO não consegue gravá-lo. Limite de requisição: 60 req/min por chave.

As duas rotas PATCH aceitam qualquer uma das formas — o wrapper é opcional:

{ "seo": { "title": "…", "description": "…" } }
{ "title": "…", "description": "…" }

As duas rotas GET sempre respondem na forma com wrapper, { "seo": { … } }, e com um objeto vazio quando nada foi definido ainda. Chaves fora da allowlist daquele nível são descartadas em silêncio; um corpo sem nenhuma chave da allowlist é um 400 cuja mensagem lista as chaves aceitas.

Janela do terminal
curl -s https://api.canverly.com/v1/posts/01J8ZQ7X4K2N5M9P0R3T6V8W1Y/seo \
-H "Authorization: Bearer ck_live_xxx"
{
"seo": {
"title": "How to do X — a practical guide",
"description": "Step by step, with the pitfalls.",
"og_image": "https://cdn.example.com/x-og.png",
"twitter_card": "summary_large_image",
"no_index": false,
"canonical_url": "https://blog.example.com/how-to-do-x",
"schema_type": "BlogPosting",
"category_slugs": ["guides"],
"tag_slugs": ["x"]
}
}

Chaves da allowlist:

Chave Tipo Observações
title string Título meta/OG deste post.
description string Meta description.
og_image string (URI) Imagem Open Graph.
twitter_card string Ex.: summary_large_image.
no_index boolean true mantém o post fora dos índices de busca.
canonical_url string (URI) Sobrescreve o link canonical.
schema_type string Article, BlogPosting ou NewsArticle.
category_slugs string[] Alimenta os arquivos de categoria.
tag_slugs string[] Alimenta os arquivos de tag.
Janela do terminal
# 1. leia o que está lá
curl -s https://api.canverly.com/v1/posts/01J8ZQ7X4K2N5M9P0R3T6V8W1Y/seo \
-H "Authorization: Bearer ck_live_xxx"
# 2. envie o objeto COMPLETO de volta, com a sua alteração aplicada
curl -X PATCH https://api.canverly.com/v1/posts/01J8ZQ7X4K2N5M9P0R3T6V8W1Y/seo \
-H "Authorization: Bearer ck_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"seo": {
"title": "How to do X — a practical guide",
"description": "Step by step, with the pitfalls.",
"schema_type": "BlogPosting",
"category_slugs": ["guides"],
"tag_slugs": ["x"],
"no_index": true
}
}'

200 OK retorna o objeto armazenado no mesmo formato com wrapper.

Os padrões do site inteiro, armazenados nas configurações do site.

Janela do terminal
curl -s https://api.canverly.com/v1/sites/me/seo \
-H "Authorization: Bearer ck_live_xxx"
{
"seo": {
"title_template": "%s — Example Blog",
"default_title": "Example Blog",
"default_description": "Notes on doing X well.",
"default_og_image": "https://cdn.example.com/og-default.png",
"twitter_card": "summary_large_image",
"twitter_handle": "@exampleblog",
"robots": "index,follow"
}
}

Chaves da allowlist: title_template, default_title, default_description, default_og_image, twitter_card, twitter_handle, robots.

Esta é mesclada com o SEO do site armazenado — as chaves que você omite mantêm o valor atual, e o resto do blob de configurações do site não é tocado.

Janela do terminal
curl -X PATCH https://api.canverly.com/v1/sites/me/seo \
-H "Authorization: Bearer ck_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "default_description": "Notes on doing X well.", "robots": "index,follow" }'

200 OK retorna o objeto mesclado, com wrapper, como { "seo": { … } }.

Status error.code Quando
400 bad_request O corpo não é um objeto JSON ou não traz nenhuma chave da allowlist (no updatable SEO fields provided (allowed: …)).
401 unauthorized Chave ausente/inválida/revogada.
403 forbidden A chave não tem seo:read / seo:write.
404 not_found Rotas de post: não existe esse post neste site (ou foi passado um slug em vez de um id).
429 rate_limited Acima de 60 req/min — respeite o Retry-After.
  • Configurações do site — tudo sobre o site que não é SEO. seo fica de fora daquela rota de propósito; ele mora aqui.
  • Atualizar um post — note que enviar category_slugs, tag_slugs ou excerpt lá grava no mesmo bloco de SEO.