Punto finale della cronologia SEO: reindirizzamenti 301

v2.6.0 · CRUD · Reindirizzamenti SEO

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

MetodoEndpointAmbitoDescrizione
GET/Export/JSON/seohistoryseohistory:readElenca tutti i reindirizzamenti SEO
GET/Export/JSON/seohistory/{id}seohistory:readSingolo reindirizzamento
POST/Import/JSON/seohistoryseohistory:writeCrea un nuovo reindirizzamento
PUT/Import/JSON/seohistoryseohistory:writeAggiorna reindirizzamento esistente
DELETE/Delete/JSON/seohistory/{id}seohistory:deleteElimina singolarmente in base all'ID
DELETE/Delete/JSON/seohistoryseohistory:deleteEliminazione in blocco/con filtro

Filtro di query (GET)

ParametriDescrizioneEsempio
?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

  1. Ometti l’host, la parte della query (?…) e l’ancora (#…): https://shop.de/lng/en/fishing-rods/spinning-rods/ diventa lng/en/fishing-rods/spinning-rods/.
  2. 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.
  3. Se il resto inizia con un prefisso di indirizzo come brand, cms, news o badge (nei negozi più vecchi anche manufacturer e blog), 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.
  4. 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).
  5. Se il percorso termina con /, si tratta di una categoria: /categories?seo_string= con il percorso completo.
  6. Nessun risultato: la cronologia SEO. La destinazione di un reindirizzamento è indicata in sh_item_type e sh_item_id (p articolo, c categoria, s pagina CMS, m produttore, n notizie). 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-alt diventa k%25C3%25BCche-alt nella parte della query. Il filtro di Shop 4.9 non trova altre varianti dello stesso indirizzo (decodificato küche-alt o riscritto kueche-alt).
  • Esatto, senza prefissi o modelli: % e _ sono validi. Maiuscole e minuscole, le barre esterne e .html non hanno alcuna rilevanza.
  • Se per un indirizzo sono presenti più voci, vengono visualizzate tutte, con la più recente sh_id per prima. Il negozio stesso prende la voce più recente dopo sh_timestamp con il tipo di destinazione della pagina (p per un indirizzo su .html, c per 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_deletestamp scadute); 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

CampoTipoDescrizione
sh_idINTChiave primaria
sh_base_idINTID dell'entità di origine
sh_base_typeENUMc=Categoria, s=CMS, m=Produttore, p=Prodotto, n=Notizie, o=Altro
sh_item_idINTID dell'entità di destinazione
sh_item_typeENUMTipo dell'entità di destinazione (stessi valori)
sh_deletestampDATETIMECancellazione automatica (impostazione predefinita: +1 anno)

Campi relativi alla lingua

CampoTipoDescrizione
sh_seo_stringVARCHAR(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=123
Modificato nella v2.122.11: DELETE /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.
Modificato nella v2.122.12: lo spazio vuoto ai margini di 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

Automatico: se l'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).
Supportato dalla v2.13.0: tutti e cinque i tipi di entità con URL SEO:
  • 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.

Creare un client OAuth2