DEV Community

Cover image for Next.js: Optimizing Images with the next/image Component.
Reme Le Hane
Reme Le Hane

Posted on • Originally published at open.substack.com

Next.js: Optimizing Images with the next/image Component.

Why Use next/image?

Next.js’s <Image> component is a powerful tool that automatically optimizes images for better performance. This includes:

  • Lazy loading images (loads only when they come into view).

  • Automatically serving the appropriate size for the user’s device.

  • Supporting modern image formats like WebP.

This feature is excellent for improving Core Web Vitals, especially Largest Contentful Paint (LCP).

Example: Using the <Image> Component

import Image from 'next/image'; export default function OptimizedImagePage() { return ( <div> <h1>Optimized Images in Next.js</h1>  <Image src="/images/sample.jpg" // Path to your image alt="A beautiful scenery" width={800} // Set width height={600} // Set height quality={80} // Optional: Adjust image quality (default: 75) placeholder="blur" // Optional: Adds a blur effect while loading /> </div>  ); } 
Enter fullscreen mode Exit fullscreen mode

Key Features of <Image>:

  1. Automatic Resizing: Generates multiple image sizes for different devices and resolutions.

  2. Lazy Loading: Reduces the initial page load time by loading images only when needed.

  3. Placeholder Options:

    1. placeholder="blur": Provides a low-quality image preview (LQIP) while the full image loads.
    2. You can also add a custom placeholder.

Working with Remote Images

For images hosted on external URLs, configure the next.config.js file to allow those domains:

// next.config.js module.exports = { images: { remotePatterns: [ { protocol: 'https', hostname: 'example.com', // Replace with your domain pathname: '/images/**', // Match specific paths if needed }, ], }, }; 
Enter fullscreen mode Exit fullscreen mode

Then use:

<Image src="https://example.com/images/sample.jpg" alt="Remote image" width={800} height={600} /> 
Enter fullscreen mode Exit fullscreen mode

Dynamic Images with Responsive Sizing

You can make images responsive by omitting the width and height props and using the layout prop:

<Image src="/images/sample.jpg" alt="Responsive image" layout="responsive" width={800} height={600} /> 
Enter fullscreen mode Exit fullscreen mode

This automatically adjusts the image dimensions to fit the container.


Bonus: Image Optimization in Markdown Content

If you’re working with Markdown or CMS content, use the next-mdx-remote library and customize images to be rendered with the <Image> component.


Why This Is a Great Trick

  1. Performance: Improves page speed by optimizing images automatically.

  2. SEO: Enhanced performance boosts rankings.

  3. Ease of Use: No need to manually create multiple image sizes or optimize them before upload.

Mastering the <Image> component is a must for building fast and responsive Next.js apps!

Top comments (0)