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}