Punto finale della cronologia SEO: reindirizzamenti 301
Cronologia SEO
Gestisci i reindirizzamenti 301 tramite API. Le voci della cronologia SEO vengono create automaticamente anche quando l'seo_name e cambia durante l'importazione di prodotti/categorie.
GET /Export/JSON/seohistory
POST /Import/JSON/seohistory
PUT /Import/JSON/seohistory
DELETE /Delete/JSON/seohistory/{id}Endpoint
| Metodo | Endpoint | Ambito | Descrizione |
|---|---|---|---|
| GET | /Export/JSON/seohistory | seohistory:read | Elenca tutti i reindirizzamenti SEO |
| GET | /Export/JSON/seohistory/{id} | seohistory:read | Singolo reindirizzamento |
| POST | /Import/JSON/seohistory | seohistory:write | Crea un nuovo reindirizzamento |
| PUT | /Import/JSON/seohistory | seohistory:write | Aggiorna reindirizzamento esistente |
| DELETE | /Delete/JSON/seohistory/{id} | seohistory:delete | Elimina singolarmente in base all'ID |
| DELETE | /Delete/JSON/seohistory | seohistory:delete | Eliminazione in blocco/con filtro |
Filtro di query (GET)
| Parametri | Descrizione | Esempio |
|---|---|---|
?type= | Tipo di entità (p=Prodotto, c=Categoria, m=Produttore, s=CMS, n=Notizie, o=Altro); a partire dalla versione v2.122.12 gli spazi vuoti ai margini non vengono conteggiati | ?type=p |
?base_id= | ID entità di origine | ?base_id=70 |
?language= | Lingua (codice ISO o ID) | ?language=de |
?seo_string= | NOVITÀ v2.122.11 Reindirizzamenti da un vecchio indirizzo, esatti (vedi «Indirizzo negozio → ID») | ?seo_string=alte-seite.html |
Indirizzo del negozio → ID v2.122.11
Dove va inserito l’indirizzo del negozio e dove reindirizza un vecchio indirizzo?
Tre filtri esatti forniscono, per un indirizzo noto (Search Console, vecchia Sitemap, e-mail del cliente), la categoria, l’articolo o la destinazione di un reindirizzamento: ?seo_string= a /categories e /seohistorys, ?seo_name= a /products. Fino alla v2.122.10 venivano segnalati i nomi UNKNOWN_FILTER e l’elenco veniva fornito senza filtri.
Passo dopo passo
- Ometti l’host, la parte della query (
?…) e l’ancora (#…):https://shop.de/lng/en/fishing-rods/spinning-rods/diventalng/en/fishing-rods/spinning-rods/. - Se il percorso inizia con
lng/xx/: omettere il segmento e inviare invece?language=xx. Senza segmento, viene utilizzata la lingua predefinita del negozio, ad esempio?language=de. - Se il resto inizia con un prefisso di indirizzo come
brand,cms,newsobadge(nei negozi più vecchi anchemanufacturereblog), si tratta di un produttore, una pagina CMS, un articolo di notizie o un badge di prodotto. Per questi indirizzi e per le pagine del negozio con nome proprio non sono disponibili i filtri. - Se il percorso termina con
.html, si tratta di un articolo:/products?seo_name=con l’ultimo segmento senza.html(…/angelrute-xy.html→seo_name=angelrute-xy). - Se il percorso termina con
/, si tratta di una categoria:/categories?seo_string=con il percorso completo. - Nessun risultato: la cronologia SEO. La destinazione di un reindirizzamento è indicata in
sh_item_typeesh_item_id(particolo,ccategoria,spagina CMS,mproduttore,nnotizie). Per una categoria, effettuare la ricerca con il percorso completo. Per un articolo, provare prima con il percorso completo (?seo_string=alte-kategorie/alter-artikel.html); se non si ottengono risultati, provare con l’ultimo segmento senza.html(?seo_string=alter-artikel): di norma, SEO History riporta un articolo rinominato solo con il suo vecchio slug.
# Kategorie zu https://shop.de/lng/en/fishing-rods/spinning-rods/
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://shop.de/xpanel/xoport/Export/JSON/categories?seo_string=fishing-rods/spinning-rods&language=en"
# Artikel zu https://shop.de/angelruten/angelrute-xy.html (nur die Artikelnummer)
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://shop.de/xpanel/xoport/Export/JSON/products?seo_name=angelrute-xy&fields=products_model"
# Wohin leitet https://shop.de/alte-kategorie/alter-artikel.html um? Erst der ganze Pfad …
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://shop.de/xpanel/xoport/Export/JSON/seohistorys?seo_string=alte-kategorie/alter-artikel.html&language=de"
# … ohne Treffer der alte Slug
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://shop.de/xpanel/xoport/Export/JSON/seohistorys?seo_string=alter-artikel&language=de"Ricerca in SEO History
- L’indirizzo viene cercato così come appare nella barra degli indirizzi, quindi con i caratteri speciali codificati con il simbolo di percentuale. Come valore di query viene codificato nuovamente (
curl -G --data-urlencode,rawurlencode()):k%C3%BCche-altdiventak%25C3%25BCche-altnella parte della query. Il filtro di Shop 4.9 non trova altre varianti dello stesso indirizzo (decodificatoküche-alto riscrittokueche-alt). - Esatto, senza prefissi o modelli:
%e_sono validi. Maiuscole e minuscole, le barre esterne e.htmlnon hanno alcuna rilevanza. - Se per un indirizzo sono presenti più voci, vengono visualizzate tutte, con la più recente
sh_idper prima. Il negozio stesso prende la voce più recente doposh_timestampcon il tipo di destinazione della pagina (pper un indirizzo su.html,cper uno su/); se non ce n’è una, viene presa la voce più recente di qualsiasi tipo; chi vuole riprodurre la propria selezione, ordina in questo modo. Il filtro restituisce anche le voci scadute (sh_deletestampscadute); il negozio non le reindirizza più. - Il filtro funziona in combinazione con
?type=,?base_id=e/seohistory/{id}. Casi di errore: API di esportazione.
Struttura dei dati
Campi
| Campo | Tipo | Descrizione |
|---|---|---|
sh_id | INT | Chiave primaria |
sh_base_id | INT | ID dell'entità di origine |
sh_base_type | ENUM | c=Categoria, s=CMS, m=Produttore, p=Prodotto, n=Notizie, o=Altro |
sh_item_id | INT | ID dell'entità di destinazione |
sh_item_type | ENUM | Tipo dell'entità di destinazione (stessi valori) |
sh_deletestamp | DATETIME | Cancellazione automatica (impostazione predefinita: +1 anno) |
Campi relativi alla lingua
| Campo | Tipo | Descrizione |
|---|---|---|
sh_seo_string | VARCHAR(255) | Percorso SEO precedente (senza dominio, senza barra iniziale) |
Esempi di richiesta
POST — Nuovo reindirizzamento
{
"type": "seohistory",
"data": [{
"sh_base_id": 70,
"sh_base_type": "c",
"sh_item_id": 102,
"sh_item_type": "c",
"sh_deletestamp": "2027-02-24 00:00:00",
"languages": {
"de": {"sh_seo_string": "alte-kategorie/alte-unterkat"},
"en": {"sh_seo_string": "old-category/old-subcat"}
}
}]
}DELETE — In blocco e con filtro
# Bulk per JSON-Body: die sh_id aus dem GET
DELETE /Delete/JSON/seohistory
{"type": "seohistory", "data": [{"sh_id": 42}, {"sh_id": 43}, {"sh_id": 44}]}
# Abgelaufene Einträge bereinigen
DELETE /Delete/JSON/seohistory?expired=1
# Filter nach Typ und Quell-ID
DELETE /Delete/JSON/seohistory?type=p&base_id=123DELETE /seohistory(s)?seo_string= restituisce un errore HTTP 400, non viene eliminato nulla; l'indirizzo cerca solo il GET. Fino alla v2.122.10 il nome veniva ignorato e venivano eliminati solo ?type=/?base_id=; con ?type=p, quindi, veniva eliminata ogni voce di prodotto. È possibile eliminare una voce specifica tramite il suo sh_id: DELETE /Delete/JSON/seohistory/{sh_id} oppure tramite il corpo JSON come sopra.type, base_id e expired non viene più considerato. Fino alla v2.122.11, GET /seohistorys?type=%20p restituiva voci di tutti i tipi, DELETE /seohistorys?type=%20p&base_id=42 eliminava le voci di ogni tipo con ID 42 e ?type=p&base_id=42%00 ogni voce di tipo p. Ora si applica il valore verificato. ⚠️ Di conseguenza, vengono eliminate anche le richieste che in precedenza venivano respinte con MISSING_FILTER, ad esempio DELETE /seohistorys?type=%20p senza ulteriori filtri: ora si tratta di tutte le voci del tipo p. Tutti i casi: API di eliminazione.Reindirizzamento automatico
Voci automatiche della cronologia SEO durante l’importazione
seo_name (o il nome stesso, con la corrispondente rigenerazione automatica) cambia durante l'importazione JSON (PUT), viene creata automaticamente una voce della cronologia SEO per il vecchio percorso — analogamente all'importazione XML. Durata: 1 anno. I duplicati vengono rilevati ed evitati (idempotente).- Prodotti (
p) — specifici per lingua - Categorie (
c) — specifiche per lingua - Manufacturers (
m) — indipendente dalla lingua (una voce, una riga di descrizione per lingua) - Notizie (
n) — specifiche per lingua - CMS (
s) — specifico per lingua
Gestire la cronologia SEO
Creare un client OAuth2 con gli scope seohistory:read, seohistory:write e seohistory:delete.