diff options
Diffstat (limited to 'src/components/SEO.tsx')
| -rw-r--r-- | src/components/SEO.tsx | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/components/SEO.tsx b/src/components/SEO.tsx new file mode 100644 index 0000000..ce86222 --- /dev/null +++ b/src/components/SEO.tsx @@ -0,0 +1,76 @@ +import React from "react" +import PropTypes from "prop-types" +import { Helmet } from "react-helmet" +import { useStaticQuery, graphql } from "gatsby" + +function SEO({ description, lang, meta, title }) { + const { site } = useStaticQuery( + graphql` + query { + site { + siteMetadata { + title + description + author + } + } + } + ` + ) + const metaDescription = description || site.siteMetadata.description + return ( + <Helmet + htmlAttributes={{ + lang, + }} + title={title} + titleTemplate={`%s | ${site.siteMetadata.title}`} + meta={[ + { + name: `description`, + content: metaDescription, + }, + { + property: `og:title`, + content: title, + }, + { + property: `og:description`, + content: metaDescription, + }, + { + property: `og:type`, + content: `website`, + }, + { + name: `twitter:card`, + content: `summary`, + }, + { + name: `twitter:creator`, + content: site.siteMetadata.author, + }, + { + name: `twitter:title`, + content: title, + }, + { + name: `twitter:description`, + content: metaDescription, + }, + ].concat(meta)} + /> + ) +} +SEO.defaultProps = { + lang: `en`, + meta: [], + description: ``, +} +SEO.propTypes = { + description: PropTypes.string, + lang: PropTypes.string, + meta: PropTypes.arrayOf(PropTypes.object), + title: PropTypes.string.isRequired, +} +export default SEO
\ No newline at end of file |
