Jun 14 2011

HelpSemaforoQuesto semaforo indica il livello difficoltà del post
semaforo verde - articolo per tutti

Attenzione agli apostrofi nel codice ecommerce

“Per un punto Martin perse la cappa” è un vecchio detto popolare che mette in guardia da un errore apparentemente di scarsa entità ma che invece comporta conseguenze spesso disastrose. E’ il detto che mi è venuto in mente rileggendo un vecchio articolo di AnalyticsPros riguardante gli errori dei codici di tracciamento e-commerce. Probabilmente un problema che noi italiani sentiamo meno, ma che vale la pena comunque di sottolineare.

Le funzioni javascript del codice asincrono (ma anche quelle del vecchio codice asincrono per la verità) vanno incapsulate tra apici singoli (carattere sotto al punto interrogativo nella tastiera italiana). Questo è un requisito fondamentale affinché il codice funzioni. Ma cosa succede se un prodotto ha un apostrofo nel suo nome? vi ricordo che il nome del prodotto non è un parametro strettamente necessario al funzionamento del sistema, ma non ho mai visto un e-commerce che omette i nomi dei prodotti e valuta le prestazioni del suo sito con Google Analytics usando solo gli SKU code.

Quindi, se nella nostra thank-you page abbiamo un codice così:


  _gaq.push(['_addItem',
      '1234',         // order ID
      'DD44',         // SKUcode
      'Nettare d'ambrosia',      // nome del prodotto
      'bevande', // categoria
      '11.99',        // prezzo unitario
      '1'             // quantità
   ]);

il sistema va a scatafascio perché nella riga del prodotto ci sono tre apostrofi. Il prodotto diventa nettare d, ambrosia sarebbe la categoria, bevande il prezzo, 11.99 la quantità, 1 sarebbe ignorato. E peraltro mancando una virgola dopo il nome del prodotto Google Analytics non ci capirebbe nulla.

La checklist proposta nel post è piuttosto semplice: se sapete di avere prodotti che contengono l’apostrofo nel nome andate in Analytics, report dei prodotti, e cercate \’ (backslash e apostrofo, senza spazi); se non vedete nessun risultato significa che quei prodotti non vengono mai registrati da GA, e che siete affetti dal problema.
Le soluzioni possibili sono:

  1. Modificare i nomi dei prodotti
  2. Operare una sostituzione lato server PRIMA di eseguire il comporre il codice di Google Analytics
  3. inserire un backslash prima dell’apostrofo in modo che la riga diventi ‘Nettare d\’ambrosia’, // nome del prodotto

Tutto questo lavoro per un semplice apostrofo? pensate a Martin! 😉

Condividi l'articolo:

3 Commenti

  1. Ciao Marco,
    in realtà il requisito vincolante per il corretto funzionamento del codice di tracciamento di GA non è l’utilizzo delle virgolette singole come delimitatore della stringa, ma la correttezza formale (ovvero secondo la grammatica di JavaScript) della stringa definita.

    Senza entrare nel merito del funzionamento del parser, la stringa può essere delimitata sia da single quotes che da double quotes, l’importante è che, se si fa uso del delimitatore all’interno della stringa, a questo venga opportunamente applicato l’escaping.

    Fare l’escape di un carattere, come hai mostrato tu nel post, significa marcarlo con un altro simbolo chiave (di solito nei linguaggi più diffusi è il backslash) cosicché il parser capisca che quello non è il delimitatore di fine stringa, ma un carattere interno alla stringa.

    Esempio di utilizzo del delimitatore con escape, all’interno della stringa:

    // esempio 1:
    var str = "La cameriera disse: \"Sarà pronto tra cinque minuti\"";
    var title = 'M\'illumino d\'immenso';
    

    Avvantaggiandoci proprio della reciproca esclusione tra single e double quotes però possiamo scrivere stringhe più chiare, scegliendo come delimitatore il carattere che non utilizzeremo dentro la stringa:

    // esempio 2:
    var str = 'La cameriera disse: "Sarà pronto tra cinque minuti"';
    var title = "M'illumino d'immenso";
    

    All’interno della prima stringa ho usato le doppie virgolette, ma non ho dovuto farne l’escape perché non sono il delimitatore.
    La seconda stringa contiene le virgolette singole, e anche qui non necessitano di escape perché il delimitatore sono le virgolette doppie.

    Tra le due notazioni, il risultato per JavaScript non cambia.
    Quello che cambia è la leggibilità, sicuramente migliore nel secondo caso.

    Applicando ciò allo snippet di tracciamento del post potremmo scrivere:

    _gaq.push(['_addItem',
          '1234',         // order ID
          'DD44',         // SKUcode
          "Nettare d'ambrosia",      // nome del prodotto
          'bevande', // categoria
          '11.99',        // prezzo unitario
          '1'             // quantità
    ]);
    

    e ottenere un tracciamento perfettamente funzionante.
    In ogni caso, l’importante è che il codice sia chiaro per chi lo scrive/ne fa la manutenzione, per cui il mio è un suggerimento di utilizzo possibile.

    Grazie comunque del tuo post e dei tuoi preziosi contributi.

  2. Stesso problema si verifica anche passando la città, L’aquila ne è un esempio, anche se nella nuova versione di analytics mi sembra abbiano tolto l’informazione geografica

  3. in realtà non c’è mai stata. non quella derivante dal campo City nel codice e-commerce.

Scrivi un Commento