Website crawler

Met de website crawler haal je automatisch informatie van je website op. Denk aan producttitels, prijzen of afbeeldingen. Deze gegevens kun je gebruiken in opvolgmails of om mailings verder te personaliseren.

De crawler werkt samen met de website tracker:

  • De tracker registreert dat een bezoeker een pagina heeft bekeken.
  • De crawler levert de actuele inhoud van die pagina.

Zo kan een opvolgmail niet alleen melden dát iemand een pagina heeft bezocht, maar ook laten zien wát er op dat moment op stond, bijvoorbeeld een productnaam of prijs.

Je maakt een crawler aan in de integratiemodule. Daar geef je een naam en de URL van je sitemap op (bijvoorbeeld https://www.jedomein.nl/sitemap.xml). De crawler haalt vervolgens periodiek de inhoud van alle pagina's in je sitemap op.

Welke data kan de crawler ophalen?

De crawler kijkt in de broncode van je pagina's. Daar staat vaak extra informatie die bezoekers niet zien, maar die wel nuttig is voor zoekmachines en tools zoals de crawler. Er zijn twee veelgebruikte manieren waarop deze informatie wordt opgeslagen.

1. Meta-tags

Meta-tags zijn kleine stukjes onzichtbare informatie in de <head> van een pagina. Zoekmachines en social media gebruiken ze vaak, en jij kunt er bijvoorbeeld ook een productnummer of SKU in zetten.

Voorbeeld van meta-tags

<meta name="description" content="Blauwe hardloopschoenen" />
<meta name="sku" content="SKU-12345" />
<meta property="og:title" content="Hardloopschoenen Blauw" />

2. ld+json (gestructureerde data)

Veel websites gebruiken schema.org om hun inhoud gestructureerd te beschrijven. Dit gebeurt in een <script>-tag met type application/ld+json. Zoekmachines gebruiken dit om productinformatie te herkennen en de crawler doet dat ook.

Voorbeeld van ld+json-data

<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Blauwe hardloopschoenen",
  "sku": "SKU-12345",
  "description": "Comfortabele schoenen voor dagelijks gebruik",
  "offers": [
    {
      "@type": "Offer",
      "price": "79.95",
      "priceCurrency": "EUR"
    }
  ]
}
</script>

Hoe kun je de verzamelde data gebruiken?

Via website tracker events ({$event.page})

De data van de crawler kun je gebruiken in opvolgacties en mailings die starten na een website tracker event, zoals een paginaweergave. De inhoud van de bezochte pagina is dan beschikbaar via {$event.page}.

Meta-tags uitlezen

De meta-tags worden door de crawler opgeslagen als losse velden in een object. Je kunt deze velden direct aanspreken via {$event.page.metatags}.

{$event.page.metatags.sku}                // SKU uit meta-tag
{$event.page.metatags.description}        // Beschrijving uit meta-tag
{$event.page.metatags['og:title']}        // Open Graph titel

Let op: meta-namen met een dubbele punt (zoals Open Graph of Twitter Cards) moet je altijd tussen vierkante haken en met quotes aanspreken.

ld+json uitlezen

Als er een ld+json-script op de pagina staat, dan zijn de gegevens hiervan ook door middel van Smarty-variabelen. De velden kun je direct aanspreken:

{$event.page.ldjson.name}                 // Naam van het product
{$event.page.ldjson.sku}                  // SKU van het product
{$event.page.ldjson.offers.price}         // Prijs van de aanbieding van het product

Mochten er meerdere ld+json-scripts op de pagina staan, dan verwijzen bovenstaande variabelen naar het eerste script, en dus het eerste product. De variabele {$event.page.ldjson} kun je ook als array gebruiken, zodat je, als er meerdere scripts op de pagina staan, de opvolgende producten ook kunt terugvinden:

{$event.page.ldjson[0].name}              // Alias voor {$event.page.ldjson.name}, naam eerste product
{$event.page.ldjson[1].sku}               // SKU van het tweede product
{$event.page.ldjson[1].offers[1].price}   // Prijs van de tweede aanbieding van het tweede product
{$event.page.ldjson.offers[2].price}      // Prijs van de derde aanbieding van het eerste product

Of loop met {foreach} door alle producten en aanbiedingen:

{foreach from=$event.page.ldjson item=product}
    {$product.name}
    {$product.sku}

    {foreach from=$product.offers item=offer}
        {$offer.currency} {$offer.price}
    {/foreach}
{/foreach}

Via {$account.webpages}

Ook de gegevens van alle andere webpagina's die door Copernica zijn verzameld zijn via Smarty-variabelen toegankelijk. Dit gaat via {$account.webpages}. Met deze variabele krijg je toegang tot alle pagina's die in je sitemap staan en door de crawler zijn opgehaald. Per pagina heb je dezelfde variabelen tot je beschikking als bij {$event.page}, zoals url, title, metatags en ld+json.

Alle pagina's ophalen

De {$account.webpages} variabele is een collectie, en je kunt daarom met een {foreach}-loop alle entries bekijken.

{foreach from=$account.webpages item=page}
    {$page.title}                       // paginatitel
    {$page.url}                         // URL van de pagina
    {$page.metatags.description}        // Beschrijving in meta-tags
    {$page.ldjson.name}                 // Productnaam uit ld+json
{/foreach}

Bovenstaand voorbeeld is in de praktijk niet zo zinvol, maar illustreert dat {$account.webpages} een collectie bevat.

Pagina's filteren op URL of SKU

Je kunt ook een filter gebruiken om alleen de pagina's op te halen die je echt nodig hebt. Er zijn twee soorten filters: op url en op sku. Daarmee kun je bijvoorbeeld direct een productpagina opzoeken of een product via zijn SKU terugvinden.

Voorbeeld op URL

Met dit voorbeeld vraag je de pagina op die precies bij de opgegeven URL hoort:

{foreach from=$account.webpages|filter:"url":"https://www.jedomein.nl/product/123" item=page}
    {$page.title}
    {$page.metatags.sku}
    {$page.ldjson.name}
{/foreach}

Voorbeeld op SKU

In dit voorbeeld vraag je de pagina op van het product met de opgegeven SKU:

{foreach from=$account.webpages|filter:"sku":"SKU-12345" item=page}
    {$page.url}
    {$page.ldjson.name}
    {$page.ldjson.offers.price}
{/foreach}

Let op: de filter sku zoekt in de bekende SKU-velden van de crawler, zoals meta-tags en ld+json.

Meerdere matches

Een filter kan natuurlijk meerdere resultaten opleveren. Met behulp van de first-modifier en de smarty {assign}-functie kun je dit limiteren tot de eerste matchende pagina:

{assign value=$profile.webpages|filter:"sku":"SKU-12345"|first var="productpage"}
{$productpage.ldjson.name}
{$productpage.ldjson.offers.price}