Giter VIP home page Giter VIP logo

next-og-image's Introduction

Next OG Image

Generate Open Graph protocol images for your website using Next.js and React components.

Inspired by Vercel's Open Graph image service ๐Ÿ™‚.

Usage

1. Install the next-og-image package

npm install next-og-image

2. Create a Next.js API route

The API route will generate and serve Open Graph images.

It can be placed in any directory inside of pages/api, but it must be named [...path].ts.

For example:

pages/api/og-image/[...path].ts

Learn more about Next.js API routes and catch-all routes.

4. Initialise Next OG Image

Place the following code inside of the [...path].ts API route:

import { createHandler } from 'next-og-image'
const ogImageHandler = createHandler()
export default ogImageHandler

The createHandler function returns a Next.js API handler function.

5. Create a page to render an OG image

Next OG Image converts any Next.js page to a PNG image suitable for use as an Open Graph image.

You can create a Next.js page at any location to render an OG image.

You may want to tell search engines not to index the page, because it's not particularly useful beyond rendering an OG image.

The image generated is 2048x1260 pixels. You may need to make the contents of you page larger than you'd expect. On my website, I have used the zoom property to quickly and easily scale up my design system components.

Here is an example from my personal site: https://ash.gd/this-is-my-jam/28252440-993a-4096-9f7b-9588ff4374ac/og-image.

The PNG version can be accessed at: https://og-image.ash.gd/api/this-is-my-jam/28252440-993a-4096-9f7b-9588ff4374ac/og-image.png.

6. Link to an OG image

Use the following URL structure to link to an OG image:

[url]/api/[apiRoute]/[ogPath].png
Token Description Example
url Website URL. https://ash.gd
apiRoute Path to OG image API route. og-image
ogPath Path to OG image page. this-is-my-jam/28252440-993a-4096-9f7b-9588ff4374ac/og-image

For example: https://og-image.ash.gd/api/this-is-my-jam/28252440-993a-4096-9f7b-9588ff4374ac/og-image.png.

Image size

The generated image is 1200x600 pixels, adhering to the 2:1 aspect ratio of Twitter's summary card with large image format.

If you have different requirements for the image size, please comment on #11.

Passing props to the source page

You can use query parameters to customise the source page. Any query parameters included in the request are passed through to the source page, where you can access them using a Next.js data fetching function, or the Next.js router.

Environment variables

Next OG Image must know your website URL in order to load a page to snapshot.

If you deploy to Vercel, this will be handled automatically using the VERCEL_URL environment variable.

If you do not deploy to Vercel, are testing locally, or want to override the URL, you can do so by setting the OG_IMAGE_BASE_URL environment variable.

Name Description Required
OG_IMAGE_BASE_URL Base URL used to load source pages. If deployed to Vercel, the VERCEL_URL environment variable is used by default. No
OG_IMAGE_CHROME_EXECUTABLE_PATH Path to Chrome. Not required when deployed to Vercel, AWS, or GCP. No

Caching

Generated images are cached by the CDN and the client for one year.

Running outside of Vercel, AWS, or GCP

To run Next OG Image outside of Vercel, AWS, or GCP, set the OG_IMAGE_CHROME_EXECUTABLE_PATH environment variable.

For example, on macOS: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome.

next-og-image's People

Contributors

juice49 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

hotshom

next-og-image's Issues

Exclude API routes from snapshotting

Attempting to snapshot the snapshot API route itself would result in a loop.

Additionally, snapshotting API routes is not the intended usage of this package.

Excluding API routes from snapshotting would resolve this issue.

I get Internal Error when I check the URL it should generates

Hi, I followed your steps, but perhaps im doing something wrong and it's not an issue. You let me know.

This is the URL I want to check:
http://localhost:3000/products

This should be the URL I need to build:
http://localhost:3000/api/og-image/products/og-image.png

I've generated the following structure:
api / og-image / [...path].ts

I've generated the following var in my .env:
OG_IMAGE_BASE_URL=http://localhost:3000

This is what I get:
image

PS: thanks for adding a library to do this, i believe it's super valuable.
PS2: I case I make it works, is it possible to modify the design of the OG Image?

Template props

It should be possible to pass props to the template page via URL search params.

Add support for non AWS Lambda environments

We depend on the chrome-aws-lambda package, which does not currently support environments beyond AWS Lambda. As reported in #3, this also means local development doesn't work.

We should investigate whether it's possible to support non AWS Lambda environments, and at least document the issue in the readme.

Customise image dimensions

We should let developers specify custom dimensions for the generated image.

  • Is the default size 2048x1260 unnecessarily large?
  • Can we provide aspect ratio presets for common varieties of OG image?
  • Should we allow developers to specify any dimensions?

Using custom props not work

When try to add custom props I get undefined in page component.
Example
url.png?type=quest
and then in component
const router = useRouter();
const { type } = router.query;
type if undefined.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.