diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js
index 792dfd6..26e5b47 100644
--- a/src/client/updateClientMetaInfo.js
+++ b/src/client/updateClientMetaInfo.js
@@ -42,7 +42,9 @@ export default function _updateClientMetaInfo (options = {}) {
break
// catch-all update tags
default:
- const { oldTags, newTags } = updateTags(options)(key, newInfo[key], document.getElementsByTagName('head')[0])
+ const headTag = document.getElementsByTagName('head')[0]
+ const bodyTag = document.getElementsByTagName('body')[0]
+ const { oldTags, newTags } = updateTags(options)(key, newInfo[key], headTag, bodyTag)
if (newTags.length) {
addedTags[key] = newTags
removedTags[key] = oldTags
diff --git a/src/client/updaters/updateTags.js b/src/client/updaters/updateTags.js
index 17c8193..d6332ae 100644
--- a/src/client/updaters/updateTags.js
+++ b/src/client/updaters/updateTags.js
@@ -5,15 +5,15 @@ export default function _updateTags (options = {}) {
const { attribute } = options
/**
- * Updates meta tags inside
on the client. Borrowed from `react-helmet`:
+ * Updates meta tags inside and on the client. Borrowed from `react-helmet`:
* https://github.com/nfl/react-helmet/blob/004d448f8de5f823d10f838b02317521180f34da/src/Helmet.js#L195-L245
*
* @param {('meta'|'base'|'link'|'style'|'script'|'noscript')} type - the name of the tag
* @param {(Array|Object)} tags - an array of tag objects or a single object in case of base
* @return {Object} - a representation of what tags changed
*/
- return function updateTags (type, tags, headTag) {
- const nodes = headTag.querySelectorAll(`${type}[${attribute}]`)
+ return function updateTags (type, tags, headTag, bodyTag) {
+ const nodes = document.querySelectorAll(`${type}[${attribute}]`)
const oldTags = toArray(nodes)
const newTags = []
let indexToDelete
@@ -72,7 +72,13 @@ export default function _updateTags (options = {}) {
}
oldTags.forEach((tag) => tag.parentNode.removeChild(tag))
- newTags.forEach((tag) => headTag.appendChild(tag))
+ newTags.forEach((tag) => {
+ if (tag.inBody === true) {
+ bodyTag.appendChild(tag)
+ } else {
+ headTag.appendChild(tag)
+ }
+ })
return { oldTags, newTags }
}
diff --git a/src/server/generators/tagGenerator.js b/src/server/generators/tagGenerator.js
index 02180d5..1169e73 100644
--- a/src/server/generators/tagGenerator.js
+++ b/src/server/generators/tagGenerator.js
@@ -10,9 +10,10 @@ export default function _tagGenerator (options = {}) {
*/
return function tagGenerator (type, tags) {
return {
- text () {
+ text ({inBody = false} = {}) {
// build a string containing all tags of this type
return tags.reduce((tagsStr, tag) => {
+ if (!!tag.inBody !== inBody) return tagsStr
// build a string containing all attributes of this tag
const attrs = Object.keys(tag).reduce((attrsStr, attr) => {
switch (attr) {