Fixing Next.js Error: Cannot Load Images from Public Folder

Updated: January 1, 2024 By: Guest Contributor Post a comment

Understanding the Issue

When developing with Next.js, one of the common issues developers face is the inability to load images from the public folder. This error typically occurs due to incorrect referencing of image paths or certain misconfigurations in the Next.js project setup. Next.js serves static files under the public directory. These files can be accessed using a root-relative path, which does not require importing them.

Potential Misconfigurations

Several reasons might cause the inability to load images from the public folder in a Next.js project. Firstly, the public folder must be at the root of your project. If it’s not, Next.js won’t be able to serve the files located inside. Secondly, incorrect file paths or typos in the image src attribute can lead to the error. Another reason could be related to the appropriate loader’s configurations if you’ve attempted to customize the default behavior.

Correcting File Paths

To fix the issue with loading images, ensure that your image paths are correct. Your references should point to the path after the public directory. For example, if you have an image located at /public/images/photo.jpg, you should reference it in your code as /images/photo.jpg. You do not need to include ‘public’ in the URL when accessing files from this directory.

Checking Public Folder Location

Ensure that the public folder is in the correct location in your project directory. The public folder must be at the root level of your Next.js project; otherwise, Next.js won’t be able to serve files from it correctly. This means it should lie alongside other top-level directories like pages, styles, and node_modules.

Serving Static Files with Next.js 13 or Newer

In Next.js 13 or newer, serving static files from the public folder follows the same principles as previous versions. Ensure you reference the static assets using the root-relative URL assuming you have the directory and file structure set up correctly. If you’ve made configurations aiming to control how images are processed or served by Next.js, such as using a custom webpack configuration or an image optimization library, ensure that those configurations are not in conflict with Next.js defaults.

Complete Code Example: Displaying an Image in Next.js

Project Directory Structure

Your Next.js project, my-next-app, has the following directory structure:

my-next-app/
├─ pages/
│  ├─ index.js
├─ public/
│  ├─ images/
│  │  ├─ my-image.jpg
├─ styles/
└─ node_modules/

Implementation in index.js

To display the image my-image.jpg located in the public/images/ directory on your homepage, use the Next.js Image component in pages/index.js. Here’s how you do it:

// pages/index.js
import Image from 'next/image';

export default function Home() {
  return (
    <div>
      {/* Using the Next.js Image component to display the image */}
      <Image 
        src="/images/my-image.jpg" 
        alt="My Image" 
        width={500} 
        height={300} 
      />
    </div>
  );
}

Important Notes:

  • Ensure that you import the Image component from next/image.
  • This approach requires that the image is located in the /public/images/ folder and the file name is exactly my-image.jpg.
  • The src attribute of the Image component is set to the path of the image relative to the public directory.
  • The width and height attributes are necessary for the Image component and should be set to the desired dimensions of the image.

With this setup, the image will be efficiently loaded and optimized by Next.js, taking advantage of the built-in image optimization capabilities of the framework.

Closing Notes

If you’ve tried the above suggestions and are still facing issues, it could be due to server configuration or deployment issues. Be sure to check the documentation for the hosting platform you’re using as well. The creation of a comprehensive server-side log could help detect the shortcomings leading to the error. Adhering to the documentation and best practices provided by the creators of Next.js is fundamental when building and managing project files. When images are correctly placed within the public folder and referenced accurately, Next.js will serve them with no issues.