Documentazione Universally

Guide passo-passo, suggerimenti SEO multilingue e best practice per aiutarti a tradurre e scalare il tuo sito WordPress.

Opzioni di integrazione Astro

Questa pagina elenca ogni opzione che puoi passare a universally({...}) in astro.config.mjs, la variabile d'ambiente che imposta ciascuna di esse e il formato dell'endpoint di push.

Opzioni

Opzione Variabile d'ambiente Predefinito Note
modalità UNIVERSALLY_MODE 'sdk' 'sdk' o 'proxy', non fa distinzione tra maiuscole e minuscole. Qualsiasi altro valore genera un errore all'esecuzione della configurazione. Vedi Astro con sottodomini linguistici.
apiKey UNIVERSALLY_API_KEY nessuno, obbligatorio La chiave di 64 caratteri dalla pagina di configurazione del progetto. Anche una chiave sk_ autentica. Una chiave pk_ causa un errore nella chiamata delle lingue e nella build.
apiUrl UNIVERSALLY_API_URL https://api.universally.com Da dove vengono lette le lingue e i cataloghi.
translatorUrl UNIVERSALLY_TRANSLATOR_URL https://translator.universally.com Dove vengono segnalate le nuove stringhe.
revalidateSeconds UNIVERSALLY_REVALIDATE_SECONDS 60 Intervallo minimo tra due controlli per le modifiche alla dashboard, per lingua. 0 o un numero negativo disattiva il polling. Un valore di ambiente non numerico viene ignorato e si applica il valore predefinito.
hreflang.format nessuno 'variant' 'variant', 'lang', o una funzione. Qualsiasi altra stringa si comporta come 'variant'.
hreflang.xDefault nessuno true Aggiunge un link x-default alla pagina sorgente. Solo false lo disabilita.
switcher nessuno true Renderizza lo script dello switcher linguistico in <UniversallyHead />. Solo false lo disabilita.
scriptsUrl UNIVERSALLY_SCRIPTS_URL https://scripts.universally.com Origine da cui viene caricato lo script switcher.

Una chiave mancante genera: "imposta UNIVERSALLY_API_KEY in .env o passa apiKey nelle opzioni di integrazione. La chiave è la chiave del sito di 64 caratteri dalla pagina di configurazione del tuo progetto."

Da dove provengono i valori

Ogni valore viene risolto in questo ordine, il primo che corrisponde vince:

  1. L'opzione in universally({...})
  2. L'ambiente di processo
  3. .env.local nella root del progetto Astro, accanto a astro.config.mjs
  4. .env nella stessa cartella

Un valore vuoto viene considerato mancante. .env.production e altri file di modalità non vengono letti. La lettura dei file richiede Node 20.12 o versioni più recenti; su Node più vecchi vengono saltati senza errori. La chiave viene risolta al momento della compilazione e incorporata nel bundle del server, mai nel bundle del client, quindi deve essere presente dove viene eseguita la compilazione. Vedi Distribuisci un sito Astro con Universally.

hreflang.format

Per una sorgente di inglese (US) con francese (Francia) sotto /fr/ e spagnolo (Messico) sotto /es/, la pagina /fr/about viene renderizzata:

<!-- 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" />

La sorgente viene prima, poi i target nell'ordine in cui Universally li restituisce, poi x-default. Le stringhe di query e gli hash vengono rimossi dagli URL. Vedi tag hreflang.

Una funzione riceve una riga di lingua, con campi come lang, variant, region e url, e restituisce il valore. Viene eseguita solo quando viene eseguita la configurazione:

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

Esempi

// 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' })

Tipi ed esportazioni

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 è tipizzato da /// <reference types="@universally-sdk/astro/env" /> in src/env.d.ts:

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

Endpoint push

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

{ "siteId": "site_123", "cacheEpoch": 12, "langs": ["fr"], "ts": 1750000000 }
Campo Significato
X-Universally-Signature HMAC-SHA256 del corpo grezzo, con chiave la metà privata della chiave del sito (i suoi ultimi 32 caratteri esadecimali), come esadecimale minuscolo
langs Codici varianti o prefissi URL. null o [] significa ogni lingua.
ts Secondi Unix, entro 5 minuti dall'orologio del ricevitore

Viene accettato uno slash finale sul percorso.

Stato Quando
200 { "ok": true, "reloaded": [...] }, elencando solo le lingue la cui epoca della cache è cambiata
401 { "ok": false }: corpo malformato, firma mancante o errata, ts scaduto, o una chiave senza metà privata
404 Modalità proxy, dove l'endpoint non esiste
405 Qualsiasi metodo diverso da POST
413 Corpo superiore a 16 KiB, controllato prima della firma
È stato utile?