Last active
May 6, 2020 20:58
-
-
Save jpigla/e63989983a5eeeb26dc9b1b82bafcb99 to your computer and use it in GitHub Desktop.
dynamically add faq schema to your content
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// h/t: https://pastebin.com/WzrQanMx | |
// Define the class for your questions and answers here. | |
// They should be marked up in a consistent manner. | |
var questionClass = 'question'; | |
var answerClass = 'answer'; | |
// Output schema to console. Set to `false` if adding via tag manager. | |
var logOutput = false; | |
(function(){ | |
// Build Data | |
var questions = Array.from(document.getElementsByClassName(questionClass)).map(function(e){return e.textContent}); | |
var answers = Array.from(document.getElementsByClassName(answerClass)).map(function(e){return e.textContent}); | |
if (questions.length && answers.length){ | |
var data = { | |
"@context": "https://schema.org", | |
"@type": "FAQPage", | |
"mainEntity": [] | |
}; | |
buildItem = (q,a) => { | |
var item = { | |
"@type": "Question", | |
"name": null , | |
"acceptedAnswer": { | |
"@type": "Answer", | |
"text":null } | |
}; | |
item['name'] = q; | |
item['acceptedAnswer']['text'] = a; | |
return item; | |
} | |
console.assert(questions.length == answers.length, {questions: questions.length, answers: answers.length, errorMsg: "Questions and Answers are not the same lengths"}); | |
data['mainEntity'] = questions.map(function(q,i){return buildItem(q,answers[i])}); | |
var script = document.createElement('script'); | |
script.type = "application/ld+json"; | |
script.innerHTML = JSON.stringify(data); | |
document.getElementsByTagName('head')[0].appendChild(script); | |
if (logOutput){ | |
console.log(script.outerHTML); | |
} | |
} | |
})(document); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment