Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gatsby-plugin-amp

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gatsby-plugin-amp

A gatsby plugin for scaffolding AMP pages

  • 0.1.17
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1.1K
decreased by-23.36%
Maintainers
1
Weekly downloads
 
Created
Source

gatsby-plugin-amp

Formats AMP-specific pages by removing javascript, combining styles and adding boilerplate. Read more about AMP (Accelerated Mobile Pages) here.

Install

npm install --save gatsby-plugin-amp

How to use

Create AMP-specific templates. Assume you have the following blog post template in post.js

import React from 'react'
import Img from 'gatsby-image'
import Layout from '../../components/layout'

export default ({ data }) => (
  <Layout>
    <Img fluid={data.image.fluid} />
    <h1>REGULAR PAGE</h1>
    <p>regular page content</p>
  </Layout>
)

Create an AMP template post.amp.js

import React from 'react'
import Layout from '../../components/layout'

export default ({ data }) => (
  <Layout>
    <amp-img src-set={data.image.srcSet} src={data.image.src} width={data.image.width} height={data.image.height} alt={data.image.altText} layout="responsive" />
    <h1>AMP PAGE</h1>
    <p>amp page content</p>
  </Layout>
)

While creating posts in your gatsby-node.js file, create an additional page in the /amp/ directory using the AMP template you just made

_.each(posts, (post, index) => {
  const previous = index === posts.length - 1 ? null : posts[index + 1].node;
  const next = index === 0 ? null : posts[index - 1].node;

  createPage({
    path: post.node.fields.slug,
    component: path.resolve('./src/templates/post.js'),
    context: {
      slug: post.node.fields.slug,
      previous,
      next,
    },
  })

  createPage({
    path: `/amp/${post.node.fields.slug}`,
    component: path.resolve('./src/templates/post.amp.js'),
    context: {
      slug: post.node.fields.slug,
      previous,
      next,
    },
  })
})

When you build your site, you should now have pages at /my-awesome-post/index.html and /amp/my-awesome-post/index.html

Add the plugin to the plugins array in your gatsby-config.js

{
  resolve: `gatsby-plugin-amp`,
  options: {
    analytics: {
      type: 'gtag',
      dataCredentials: 'include',
      config: {
        vars: {
          gtag_id: <GA_TRACKING_ID>,
          config: {
            <GA_TRACKING_ID>: {
              page_location: '{{pathname}}'
            },
          },
        },
      },
    },
    canonicalBaseUrl: 'http://www.example.com/',
    components: ['amp-form'],
    excludedPaths: ['/404.html', '/'],
    pathIdentifier: '/amp/',
    useAmpClientIdApi: true,
  },
},

When your site builds, your page in the /amp directory should now be a valid AMP page

Options

analytics {Object} If you want to include any amp-analytics tags, set that configuration here.

    type {String}     Your analytics type. See the list of available vendors here.

    dataCredentials {String}     You value for the data-credentials attribute. Omit to remove the attribute.

    config {Object | String}     This can be either an object containing your analytics configuration or a url to your analytics configuration. If you use Google Analytics gtag, your cofiguration might look like this:

vars: {
  gtag_id: <GA_TRACKING_ID>,
  config: {
    <GA_TRACKING_ID>: {
      page_location: '{{pathname}}'
    },
  },
},

     If you use a tag manager, your config would simply be a url like https://www.googletagmanager.com/amp.json?id=GTM-1234567&amp;gtm.url=SOURCE_URL. You can use double curly braces to interpolate the pathname into a configuration value e.g. page_location: '{{pathname}}'. See here to learn more about amp-analytics configurations.

canonicalBaseUrl {String} The base URL for your site. This will be used to create a rel="canonical" link in your amp template and rel="amphtml" link in your base page.

components {Array<String>} The components you will need for your AMP templates. Read more about the available components here.

excludedPaths{Array<String>} By default, this plugin will create rel="amphtml" links in all pages. If there are pages you would like to not have those links, include them here. this may go away if a way can be found to programatically exclude pages based on whether or not they have an AMP equivalent. But for now, this will work

pathIdentifier {String} The url segment which identifies AMP pages. If your regular page is at http://www.example.com/blog/my-awesome-post and your AMP page is at http://www.example.com/amp/blog/my-awesome-post, your pathIdentifier should be /amp/

useAmpClientIdApi {Boolean} If you are using a Client ID for Google Analytics, you can use the Google AMP Client ID to determine if events belong to the same user when they visit your site on AMP and non-AMP pages. Set this to true if you would like to include the necessary meta tag in your AMP pages. You can read more about this concept here

Caveats

The standard HTML template that gatsby uses will cause a validation error because it is missing minimum-scale=1 in the meta viewport tag. You can supply your own template by creating a src/html.js file. Then you can change the meta viewport tag. The default template that gatsby uses can be found here.

<!-- Original -->
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Replacement -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, shrink-to-fit=no" />

Keywords

FAQs

Package last updated on 09 Nov 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc