Documentação Universally

Guias passo a passo, dicas de SEO multilíngue e melhores práticas para ajudar você a traduzir e escalar seu site WordPress.

Opções de integração com Astro

Esta página lista cada opção que você pode passar para universally({...}) em astro.config.mjs, a variável de ambiente que define cada uma e o formato do endpoint de push.

Opções

Opção Variável de ambiente Padrão Notas
modo UNIVERSALLY_MODE 'sdk' 'sdk' ou 'proxy', sem diferenciação de maiúsculas e minúsculas. Qualquer outro valor gera um erro quando a configuração é executada. Veja Astro com subdomínios de idioma.
apiKey UNIVERSALLY_API_KEY nenhum, obrigatório A chave de 64 caracteres da página de Configuração do projeto. Uma chave sk_ também autentica. Uma chave pk_ falha na chamada de idiomas e na compilação.
apiUrl UNIVERSALLY_API_URL https://api.universally.com De onde os idiomas e catálogos são lidos.
translatorUrl UNIVERSALLY_TRANSLATOR_URL https://translator.universally.com Para onde novas strings são reportadas.
revalidateSeconds UNIVERSALLY_REVALIDATE_SECONDS 60 Menor intervalo entre duas verificações de edições no painel, por idioma. 0 ou um número negativo desliga o polling. Um valor de ambiente não numérico é ignorado e o padrão é aplicado.
hreflang.format nenhum 'variant' 'variant', 'lang' ou uma função. Qualquer outra string se comporta como 'variant'.
hreflang.xDefault nenhum verdadeiro Adiciona um link x-default à página de origem. Apenas false o desativa.
switcher nenhum verdadeiro Renderiza o script do seletor de idiomas em <UniversallyHead />. Apenas false o desativa.
scriptsUrl UNIVERSALLY_SCRIPTS_URL https://scripts.universally.com Origem de onde o script do switcher é carregado.

Uma chave ausente gera um erro: "defina UNIVERSALLY_API_KEY em .env ou passe apiKey nas opções de integração. A chave é a chave do site de 64 caracteres da página de Configuração do seu projeto."

De onde vêm os valores

Cada valor é resolvido nesta ordem, a primeira correspondência vence:

  1. A opção em universally({...})
  2. O ambiente do processo
  3. .env.local na raiz do projeto Astro, ao lado de astro.config.mjs
  4. .env na mesma pasta

Um valor vazio conta como ausente. .env.production e outros arquivos de modo não são lidos. A leitura dos arquivos requer Node 20.12 ou mais recente; em Node mais antigo, eles são ignorados sem erro. A chave é resolvida no momento da compilação e compilada no pacote do servidor, nunca no pacote do cliente, portanto, deve estar presente onde a compilação é executada. Veja Deploy de um site Astro com Universally.

hreflang.format

Para uma origem em inglês (EUA) com francês (França) em /fr/ e espanhol (México) em /es/, a página /fr/about é renderizada:

<!-- format: 'variant', the default -->
<link rel="alternate" hreflang="en-us" href="https://example.com/about" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="es-419" href="https://example.com/es/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />

<!-- format: 'lang' -->
<link rel="alternate" hreflang="en" href="https://example.com/about" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="es" href="https://example.com/es/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />

A origem vem primeiro, depois os destinos na ordem em que Universally os retorna, depois x-default. Strings de consulta e hashes são removidos das URLs. Veja tags hreflang.

Uma função recebe uma linha de idioma, com campos como lang, variant, region e url, e retorna o valor. Ela é executada apenas quando a configuração é executada:

universally({
  hreflang: {
    format: (language) => language.variant.toUpperCase()
  }
})

Exemplos

// Check for dashboard edits every five minutes
universally({ revalidateSeconds: 300 })

// Place the switcher script yourself
universally({ switcher: false })

// Serve through language subdomains
universally({ mode: 'proxy' })

Tipos e exportações

import universally, {
  REVALIDATE_PATH,            // '/_universally/revalidate'
  DEFAULT_REVALIDATE_SECONDS, // 60
  DEFAULT_SCRIPTS_URL         // 'https://scripts.universally.com'
} from '@universally-sdk/astro';
import type {
  HreflangOptions,
  ResolvedHreflang,
  UniversallyMode,
  UniversallyOptions,
  ResolvedUniversallyOptions
} from '@universally-sdk/astro';
import { UniversallyHead } from '@universally-sdk/astro/components';

Astro.locals é tipado por /// <reference types="@universally-sdk/astro/env" /> em src/env.d.ts:

declare namespace App {
  interface Locals {
    lang?: string;
    t: (source: string) => string;
    href: (path: string) => string;
  }
}

Endpoint de push

POST /_universally/revalidate
X-Universally-Signature: v1=<hex>
Content-Type: application/json

{ "siteId": "site_123", "cacheEpoch": 12, "langs": ["fr"], "ts": 1750000000 }
Campo Significado
X-Universally-Signature HMAC-SHA256 do corpo bruto, com chave da metade privada da chave do site (seus últimos 32 caracteres hexadecimais), como hexadecimal em minúsculas
langs Códigos de variante ou prefixos de URL. null ou [] significa todos os idiomas.
ts Segundos Unix, dentro de 5 minutos do relógio do receptor

Uma barra final no caminho é aceita.

Status Quando
200 { "ok": true, "reloaded": [...] }, listando apenas idiomas cuja época de cache mudou
401 { "ok": false }: corpo malformado, assinatura ausente ou incorreta, ts expirado ou uma chave sem metade privada
404 Modo proxy, onde o endpoint não existe
405 Qualquer método diferente de POST
413 Corpo acima de 16 KiB, verificado antes da assinatura
Isso foi útil?