Implement structured data layer for advanced tracking with Google Tag Manager.
Base Data Layer
Initialize in Template
File: themes/yourtheme/templates/Page.ss
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'pageDataReady',
'pageType': '$ClassName',
'pageTitle': '$Title.JS',
'pageURL': '$AbsoluteLink',
<% if $CurrentMember %>
'userStatus': 'logged_in',
'userId': '$CurrentMember.ID',
'userRole': '$CurrentMember.ClassName',
<% else %>
'userStatus': 'guest',
<% end_if %>
});
</script>
Content-Specific Data Layers
Blog Posts
File: themes/yourtheme/templates/Layout/BlogPost.ss
<script>
window.dataLayer.push({
'event': 'contentView',
'contentType': 'blog_post',
'contentId': '$ID',
'contentTitle': '$Title.JS',
'contentCategory': '$Category.Title.JS',
'contentAuthor': '$Author.Name.JS',
'publishDate': '$PublishDate.Nice'
});
</script>
Form Data Layer Events
File: app/src/PageController.php
public function doSubmitContact($data, $form)
{
Requirements::customScript(<<<JS
if (window.dataLayer) {
window.dataLayer.push({
'event': 'formSubmission',
'form': {
'name': 'contact',
'id': '{$form->FormName()}',
'fields': {
'name': '{$data['Name']}',
'email': '{$data['Email']}'
}
}
});
}
JS
);
return $this->redirectBack();
}
Using Data Layer Variables in GTM
Create variables in GTM:
- Variable Type: Data Layer Variable
- Variable Name:
pageType,contentId, etc.