Personal tools
Breve analisi della ricerca di Plone: SearchableText

I Predatori del Parametro Perduto

Dec 06, 2012

Breve analisi della ricerca di Plone: SearchableText

Un semplice parametro Plone: SearchableText. Eppure il suo uso scatena vari comportamenti e ci permetterà di analizzare alcune funzionalità nascoste del nostro CMS

In questo articolo mi concedo una semplice analisi del parametro SearchableText, che può far parte di una qualunque query string delle chiamate al CMS Plone e che ha funzioni diverse in base alla pagina richiamata.

Questo parametro può anche impattare sull'efficienza dello strato di cache del vostro sito (Varnish) e ci apre la strada a qualche interessante analisi dei JavaScript di Plone 4.

SearchableText e la ricerca

Partiamo da un semplice sito Plone appena installato e usiamo il campo di ricerca istantanea per interrogare il CMS con l'unica pagina disponibile (la famigerata "Welcome to Plone", qui in versione italiana).

Per semplicità quindi cerchiamo la parola "Benvenuto".

plone-searchabletext-01.png

Cliccando sul pulsante "Ricerca", si viene catapultati alla SERP (la pagina dei risultati della ricerca) interna di Plone:

plone-searchabletext-02.png

In questo momento l'URL nel nostro browser è qualcosa molto simile a
"http://myhost/Plone/@@search?SearchableText=Benvenuto".

L'effetto che il parametro ha sulla pagina di ricerca è direttamente correlato ai risultati della ricerca stessa: modificare quel parametro significa modificare i criteri della ricerca.

SearchableText e i contenuti

Questo parametro ha però anche un altro effetto, se fornito alle altre pagine del sito.

Andando ad esempio a visitare la home del nostro sito appena installato (a un indirizzo che diventa quindi "http://myhost/Plone") e riscrivendo l'URL aggiungendovi il parametro SearchableText (ottenendo qualcosa come "http://myhost/Plone?SearchableText=Benvenuto"), l'effetto è quello di evidenziare i termini di ricerca.

plone-searchabletext-03.png

La funzionalità è ottenuta tramite JavaScript, quindi è un processo effettuato lato browser utente.
Tutto piuttosto "carino", e c'è un innegabile aumento dell'usabilità del sito - anche se, a mio parere, non è una di quelle funzionalità che ti cambiano la vita: credo che un utente medio sappia usare la ricerca all'interno di una pagina.

SearchableText e Varnish

Utilizzare questa funzionalità può avere un prezzo da pagare.

Se il vostro sito Plone si trova dietro a uno strato software che esegue cache (ipotizziamo il nostro ben conosciuto Varnish), c'è sempre da tenere presente che "http://myhost/Plone" è diverso da "http://myhost/Plone?SearchableText=...", quindi le pagine mantenute in cache sono molteplici.

Fino all'avvento di Plone 4 questo particolare poteva essere non trascurabile, perché la pagina dei risultati della ricerca di Plone generava essa stessa dei link a contenuti del sito aggiungendovi anche il parametro SearchableText (ovviamente per ottenere l'effetto di evidenziare il testo cercato dall'utente).
Si poteva quindi incappare in una situazione in cui la pagina più visitata del sito venisse richiamata in 20 modi diversi solo per ottenere l'effetto di colorarne il testo!

Al tempo, sacrificando l'evidenziazione del testo cercato, poteva valere la pena modificare la SERP di Plone perché quel parametro non venisse utilizzato e generare quindi sempre la stessa URL.
L'ovvio effetto positivo è mantenere in cache una sola pagina, che sia stata generata per effetto di una visita o di una ricerca.

Evidenziare il testo cercato in Plone 4

Veniamo ora alle ottimizzazioni ed evoluzioni generate dall'avvento di Plone 4, relativamente a questo suo aspetto.

Il codice che si occupa di evidenziare i termini cercati è racchiuso in un plugin jQuery nel file jquery.highlightsearchterms.js.

Le "vecchie" funzionalità sono state mantenute: richiamando una qualunque pagina del sito col parametro SearchableText, il testo trovato viene evidenziato.

La grossa novità sta nella SERP.
Ancora oggi un sito Plone 4 permette ai motori di ricerca di indicizzare la propria SERP (per evitare questo basta una semplice modifica al codice della pagina, o installare collective.perseo) ma non vengono più generati URL che utilizzano quel parametro...

...eppure visitando i link generati dalla ricerca otteniamo ancora il nostro testo evidenziato. Come è possibile?

Il segreto sta nell'evoluzione che questo codice JavaScript ha subìto.

Se infatti il parametro SearchableText non viene trovato, si passa automaticamente all'analisi del Referer HTTP (il tutto sempre usando solo JavaScript): se il parametro viene trovato nell'URL della pagina di provenienza, allora l'analisi del testo da evidenziare viene effettuata sull'URL del referer e non in quello della pagina corrente.

Ciò azzera automaticamente il numero di duplicati di un documento nella cache di Varnish, senza dover personalizzare la pagina dei risultati.

Evidenziare il testo cercato da Google

Ma non è finita qui.

Un'altra delle funzionalità che questo script introduce è il supporto all'evidenziazione del testo ricercato anche quando la pagina di provenienza non è la ricerca di Plone ma la SERP di altri motori di ricerca (i più famosi, come Google, Yahoo e vari altri sono già supportati automaticamente).

Con l'analisi del referer siamo nei fatti in grado di capire se la richiesta alla pagina corrente è stata generata da un sito esterno.

Se cerchiamo la parola "Benvenuto" in Google, l'URL (semplificato) che ci porta alla SERP è qualcosa come "https://www.google.com/search?q=benvenuto".

Ammettendo che da Google fossimo in grado di raggiungere il nostro sito Plone tramite questa parola chiave, e di arrivare proprio alla pagina "Benvenuto in Plone", il nostro script sarebbe in grado di leggere il referer.

Il plugin jQuery mantiene internamente una struttura che contiene una serie di informazioni chiave/valore in una forma dove la chiave è l'indirizzo del motore di ricerca e il valore è il parametro di ricerca.

Nel caso di Google troviamo infatti:

...
{ address="google\.",  key="q"}
...

L'indirizzo è sotto forma di espressione regolare, mentre la presenza o meno del prefisso "www" è gestita dallo script stesso.

Evidenziare il testo cercato dal vostro motore di ricerca

Non è comune, ma magari la vostra Azienda ha un motore di ricerca interno che non è necessariamente quello di Plone.

Potreste avere un motore di ricerca per la vostra intranet basato su Solr, oppure un Google Search Appliance? In entrambi i casi è probabile che Plone non supporti automaticamente l'evidenziazione del testo cercato.

Applicare questa modifica è semplice e non richiederebbe nemmeno una personalizzazione del codice dello script.
Vi basta aggiungere un nuovo elemento alla struttura dati, magari tramite un nuovo JavaScript che modifichi la struttura originale in modo non invasivo.

Basta una riga:

$.fn.highlightSearchTerms.referrers.push({address: 'my-search\.', key:'mysearchparam'})

Conclusioni

Che la funzionalità di messa in evidenza del testo cercato vi piaccia o meno, spero di essere riuscito a far passare, con questo articolo, un concetto: come le pagine del nostro sito sono richiamate per ottimizzare l'efficienza della cache.

Molto spesso un software per analizzare i log di accesso è sufficiente (AWStats in primis) e può mostrarvi interessanti spunti di riflessione.

L'immagine di testata è di lawrence.

comments powered by Disqus