DEV Community

Cover image for The Power of Static Site Generation (SSG) in Next.js: A Practical Guide
Rowsan Ali
Rowsan Ali

Posted on

The Power of Static Site Generation (SSG) in Next.js: A Practical Guide

In recent years, the static site generation (SSG) approach has gained immense popularity in the web development world. SSG not only improves website performance but also simplifies the development process. One of the leading frameworks that excels in SSG is Next.js. In this practical guide, we will explore the power of SSG in Next.js and demonstrate how to leverage it to create fast, efficient, and dynamic web applications.

What is Static Site Generation (SSG)?

Static Site Generation is a method of building web pages in advance and serving them as static files to users. Unlike traditional dynamic websites that generate content on the fly for each request, SSG prebuilds web pages during the development phase. This approach offers several advantages, including faster load times, improved SEO, and cost-effective scalability.

The Benefits of SSG in Next.js

Next.js, a popular React framework, has embraced SSG as one of its core features. Here are some of the benefits that make Next.js a great choice for SSG:

  1. Performance: SSG generates static HTML files for each page, reducing the load time significantly. This results in a snappy user experience, even on slower connections.

  2. SEO Optimization: Search engines favor static HTML pages, making SSG a great choice for improving search engine rankings.

  3. Cost-Effective Hosting: Hosting static files is more cost-effective and scalable compared to server-side rendering (SSR) or serverless functions.

  4. Developer Experience: Next.js provides an excellent developer experience, with features like hot module replacement and automatic code splitting, making development a breeze.

  5. Data Fetching: Next.js allows you to fetch data at build time, which is crucial for building dynamic websites. You can fetch data from various sources like APIs, databases, or even the file system.

Creating a Next.js Application with SSG

Let's dive into a practical example to understand how to leverage SSG in Next.js. We'll create a simple blog application with dynamic content.

Prerequisites

Before we begin, ensure you have Node.js and npm (Node Package Manager) installed on your machine. You can download and install them from nodejs.org.

Step 1: Setting up the Next.js Project

First, create a new Next.js project. Open your terminal and run the following commands:

npx create-next-app my-blog
cd my-blog
Enter fullscreen mode Exit fullscreen mode

Step 2: Creating a Blog Page

Next, create a new blog page. In your project directory, create a new file named pages/blog.js and add the following code:

import React from 'react';

const Blog = ({ posts }) => {
  return (
    <div>
      <h1>My Blog</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
};

export default Blog;
Enter fullscreen mode Exit fullscreen mode

Step 3: Fetching Data with SSG

To fetch data with SSG, create a function getStaticProps in your blog.js file. This function will fetch data at build time and pass it as props to the component.

import React from 'react';

const Blog = ({ posts }) => {
  return (
    <div>
      <h1>My Blog</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
};

export async function getStaticProps() {
  // Fetch data from an API, database, or file system
  const res = await fetch('https://api.example.com/posts');
  const posts = await res.json();

  return {
    props: {
      posts,
    },
  };
}

export default Blog;
Enter fullscreen mode Exit fullscreen mode

Step 4: Running the Development Server

To run the development server, use the following command:

npm run dev
Enter fullscreen mode Exit fullscreen mode

Visit http://localhost:3000/blog in your web browser to see your blog page in action. The data will be fetched at build time and displayed on the page.

Building and Deploying

Once you're satisfied with your blog application, you can build and deploy it to various hosting providers like Vercel, Netlify, or AWS Amplify. When you build the application, Next.js will generate optimized static files that can be served quickly and efficiently.

To build your application, use the following command:

npm run build
Enter fullscreen mode Exit fullscreen mode

And to start a production-ready server:

npm start
Enter fullscreen mode Exit fullscreen mode

Conclusion

Static Site Generation in Next.js is a powerful feature that can enhance your web application's performance, SEO, and developer experience. It simplifies the process of fetching and rendering data, making it easier to create dynamic websites. By following this practical guide, you've learned the basics of building a blog using SSG in Next.js. Now you can apply this knowledge to create your own high-performance web applications. Happy coding!

Top comments (5)

Collapse
 
dsaga profile image
Dusan Petkovic

Do you know if there is a way to have SSG and run it without a nodejs server? just on CDN?

Also, any idea how to do the same with, the new App Router in nextjs?

Thanks

Collapse
 
yournewempire profile image
Archie Smyth • Edited

Hey,

Not sure. You would still need node npm run build to generate a prod build, then the dist is pushed into a CDN somehow.

So if you could do that locally then push the static files to a CDN that would be sweet. Again though, I don't have a cut and dry answer, just trying to help for free.

Thanks

Collapse
 
dsaga profile image
Dusan Petkovic

Last I tested it was possible with an experimental feature in nextjs, I tried to use it for a github pages website, but because it generated the static files in dot folder, that caused an issue...

Seams its possible now, but not quite sure how it works
nextjs.org/docs/pages/building-you...

Collapse
 
rowsanali profile image
Rowsan Ali

Thanks

Collapse
 
rowsanali profile image
Rowsan Ali

Thank you