@pittica/gatsby-plugin-seo
Version:
SEO optimization plugin for GatsbyJS.
93 lines (80 loc) • 2.24 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = Webpage;
var _react = _interopRequireDefault(require("react"));
var _reactHelmetAsync = require("react-helmet-async");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _gatsbyPluginUtils = require("@pittica/gatsby-plugin-utils");
function Webpage({
author,
siteUrl,
datePublished,
defaultTitle,
description,
image,
isBlogPost,
organization,
title,
url,
headline
}) {
const entity = {
"@context": "http://schema.org",
"@type": isBlogPost ? "BlogPosting" : "WebPage",
url: (0, _gatsbyPluginUtils.withUrl)(url, siteUrl),
name: title,
description,
mainEntityOfPage: {
"@type": "WebSite",
"@id": siteUrl
}
};
if (image) {
entity.image = {
"@type": "ImageObject",
url: (0, _gatsbyPluginUtils.withUrl)(image, siteUrl)
};
}
if (organization !== null && organization !== void 0 && organization.name) {
entity.publisher = {
"@type": "Organization",
url: organization.url,
logo: organization.logo,
name: organization.name
};
}
if (isBlogPost) {
entity.alternateName = defaultTitle;
entity.headline = headline;
entity.datePublished = datePublished;
if (author) {
entity.author = {
"@type": "Person",
name: author,
url: siteUrl
};
}
}
return /*#__PURE__*/_react.default.createElement(_reactHelmetAsync.Helmet, null, /*#__PURE__*/_react.default.createElement("script", {
type: "application/ld+json",
key: "ld-json-schemaorg"
}, JSON.stringify(entity)));
}
Webpage.propTypes = {
author: _propTypes.default.string,
siteUrl: _propTypes.default.string,
datePublished: _propTypes.default.any,
defaultTitle: _propTypes.default.string,
description: _propTypes.default.string,
image: _propTypes.default.string,
isBlogPost: _propTypes.default.bool,
organization: _propTypes.default.object,
title: _propTypes.default.string,
url: _propTypes.default.string,
headline: _propTypes.default.string
};
Webpage.defaultProps = {
isBlogPost: false,
organization: {}
};