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 10 months 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?