Skip to main content
All CollectionsObservePoint Custom Tag
OP Custom Tag - Other SEO Details
OP Custom Tag - Other SEO Details
Luiza Gircoveanu avatar
Written by Luiza Gircoveanu
Updated over a week ago

Overview

This custom script captures additional SEO details.

Under Variable Summary, select ObservePoint data and under SEO Data is the relevant information.

  • metaDescription: Collects the full value of the description Meta tag.

  • metaKeywords: Collects all the terms in the keywords Meta tag.

  • pageTitle: Shows the title of each URL.

  • imageAlt: Shows the caption that goes with each URL.

  • canonical URL: An HTML element for each URL that prevents duplicate content problems.

  • robots meta tag: Shows which pages have a robot text file. Robot text files instruct search engines on which pages they should crawl.

  • h1 - h6: Shows the presence of header tags on each page.

To capture these details in an Audit or Journey, paste the snippet below into an Execute Action:

function opReqGetAsync(paramObject, acct, callback) {
var baseURL = "https://opreq.observepoint.com/?acct=" + acct;
var opReq = new XMLHttpRequest();
opReq.onreadystatechange = function() {
if (opReq.readyState == 4 && opReq.status == 200) {
callback(opReq.responseText);
}
}
opReq.open("POST", baseURL, true);
opReq.send(JSON.stringify(paramObject));
}
var metaDescription = 'No meta description found',
metaKeywords = 'No meta keywords found',
pageTitle = 'No page title found',
pageURL = window.location.href,
imageAlt = '0 alt tags found',
canonicalURL = 'No canonical URL found',
robots = 'No robots.txt found',
h1 = '0 h1 tags found',
h2 = '0 h2 tags found',
h3 = '0 h3 tags found',
h4 = '0 h4 tags found',
h5 = '0 h5 tags found',
h6 = '0 h6 tags found';
/* meta description */
var metaDescLower = document.querySelector('meta[name="description"'),
metaDescCap = document.querySelector('meta[name="DESCRIPTION"');

if (metaDescLower != null && metaDescLower.getAttribute('content') !== '') {
var metaDesc = metaDescLower.getAttribute('content');
var chars = metaDesc.length;
metaDescription = metaDesc + ' [' + chars + ' characters]';
} else if (metaDescCap.length != null && metaDescCap.getAttribute('content') !== '') {
var metaDesc = metaDescCap.getAttribute('content');
var chars = metaDesc.length;
metaDescription = metaDesc + ' [' + chars + ' characters]';
}

/* meta keywords */
var metaKeyLower = document.querySelector('meta[name="keywords"'),
metaKeyCap = document.querySelector('meta[name="KEYWORDS"');

if (metaKeyLower != null && metaKeyLower.getAttribute('content') !== '') {
metaKeywords = metaKeyLower.getAttribute('content');
} else if (metaKeyCap != null && metaKeyCap.getAttribute('content') !== '') {
metaKeywords = metaKeyCap.getAttribute('content');
}

/* page title */
if (document.title) {
pageTitle = document.title;
}

/* all image alt attributes */
var allImages = document.querySelectorAll('img');
if (allImages.length > 0) {
imageAlt = [];
for (var x = 0; x < allImages.length; x++) {
alt = allImages[x].getAttribute('alt');
if (alt) {
imageAlt.push(alt);
}
}
imageAlt = (imageAlt.length > 0) ? imageAlt.join(', ') : '0 alt tags found';
}

/* canonical URL */
if (document.querySelectorAll('[rel="canonical"]').length > 0) {
canonicalURL = document.querySelectorAll('[rel="canonical"]')[0].getAttribute('href');
}

/* robots.txt */
if (document.querySelectorAll('[name*="robots"]').length > 0) {
robots = 'true';
}

/* all H1s */
var allH1s = document.querySelectorAll('h1');
if (allH1s.length > 0) {
h1 = [];
for (var x = 0; x < allH1s.length; x++) {
h1.push(allH1s[x].textContent);
}
h1 = h1.join(', ');
} /* all H2s */
var allH2s = document.querySelectorAll('h2');
if (allH2s.length > 0) {
h2 = [];
for (var x = 0; x < allH2s.length; x++) {
h2.push(allH2s[x].textContent);
}
h2 = h2.join(', ');
} /* all H3s */
var allH3s = document.querySelectorAll('h3');
if (allH3s.length > 0) {
h3 = [];
for (var x = 0; x < allH3s.length; x++) {
h3.push(allH3s[x].textContent);
}
h3 = h3.join(', ');
} /* all H4s */
var allH4s = document.querySelectorAll('h4');
if (allH4s.length > 0) {
h4 = [];
for (var x = 0; x < allH4s.length; x++) {
h4.push(allH4s[x].textContent);
}
h4 = h4.join(', ');
} /* all H5s */
var allH5s = document.querySelectorAll('h5');
if (allH5s.length > 0) {
h5 = [];
for (var x = 0; x < allH5s.length; x++) {
h5.push(allH5s[x].textContent);
}
h5 = h5.join(', ');
} /* all H6s */
var allH6s = document.querySelectorAll('h6');
if (allH6s.length > 0) {
h6 = [];
for (var x = 0; x < allH6s.length; x++) {
h6.push(allH6s[x].textContent);
}
h6 = h6.join(', ');
}
var seoDataObj = {
"Meta_Description": metaDescription,
"Page_Title": pageTitle,
"Page_URL": pageURL,
"Image_Alt": imageAlt,
"Canonical_URL": canonicalURL,
"Robots.txt": robots,
"h1": h1,
"h2": h2,
"h3": h3,
"h4": h4,
"h5": h5,
"h6": h6
};
opReqGetAsync(seoDataObj, "SEO Data");
Did this answer your question?