The public directory lets you store files like images or icons that your website can use directly. It makes sharing these files easy without extra setup.
Public directory for static files in NextJS
public/
your-file.png
your-folder/
another-file.jpgAll files inside the public folder are served at the root URL.
For example, public/logo.png is accessible at /logo.png.
<img src="/logo.png" alt="Site Logo" />
public/favicon.ico
public/files/manual.pdf for users to download.<a href="/files/manual.pdf" download>Download Manual</a>This component shows how to use an image and a downloadable file from the public directory. The logo.png and files/manual.pdf must be inside the public folder.
import Image from 'next/image' export default function Home() { return ( <main> <h1>Welcome to My Site</h1> <Image src="/logo.png" alt="Site Logo" width={150} height={50} /> <p>Here is a static image served from the public folder.</p> <a href="/files/manual.pdf" download>Download Manual</a> </main> ) }
Do not import files from public using JavaScript imports; use direct paths instead.
Files in public are not processed by Webpack, so they keep their original names and paths.
The public folder holds static files accessible by URL paths.
Use direct paths starting with / to reference these files in your app.
This is the easiest way to serve images, icons, and documents without extra configuration.
Practice
public directory in a Next.js project?Solution
Step 1: Understand the role of the public directory
Thepublicfolder is designed to hold static files such as images, icons, and documents.Step 2: Recognize how files in public are accessed
Files insidepublicare accessible directly via URL paths starting with/.Final Answer:
To store static files like images and icons accessible via URL paths -> Option CQuick Check:
public folder = static files access [OK]
- Confusing public with components folder
- Thinking public holds API routes
- Assuming public stores config files
logo.png stored inside the public folder in a Next.js component?Solution
Step 1: Understand URL referencing for public files
Files in thepublicfolder are referenced by their path starting with/, without including the folder name.Step 2: Apply correct src attribute
To referencelogo.pnginpublic, use/logo.pngas the src value.Final Answer:
<img src="/logo.png" alt="Logo" /> -> Option AQuick Check:
Use leading slash and omit 'public' folder name [OK]
- Including 'public' in the path
- Using relative paths like './' or '../'
- Forgetting the leading slash
export default function Logo() {
return <img src="/images/avatar.png" alt="User Avatar" />
}Assuming
avatar.png is located inside public/images folder.Solution
Step 1: Understand public folder URL mapping
Files insidepublicare served from the root URL path, so/images/avatar.pngmaps topublic/images/avatar.png.Step 2: Determine the full URL
When running locally, the base URL ishttp://localhost:3000, so the full URL ishttp://localhost:3000/images/avatar.png.Final Answer:
http://localhost:3000/images/avatar.png -> Option DQuick Check:
public/images/avatar.png = /images/avatar.png URL [OK]
- Adding 'public' to URL path
- Using relative or src folder paths
- Confusing file location with URL
favicon.ico inside the public folder but your browser shows a 404 error when accessing /favicon.ico. What is the most likely cause?Solution
Step 1: Check file location and URL path
If the file is directly insidepublic, accessing/favicon.icoshould work unless the file name or extension is incorrect.Step 2: Verify file name and extension
A common cause of 404 is a misspelled file name or wrong extension likefavicon.ico.pngorfav-icon.ico.Final Answer:
The file name is misspelled or has wrong extension -> Option BQuick Check:
Check exact file name and extension for 404 errors [OK]
- Assuming Next.js needs imports for public files
- Forgetting to include subfolder in URL
- Restarting server unnecessarily
guide.pdf stored in public/docs so users can download it by clicking a link. Which is the correct way to create the link in a Next.js component?Solution
Step 1: Reference public files with leading slash and no 'public' folder name
Files insidepublicare accessed by URL paths starting with/and omit thepublicfolder name.Step 2: Use anchor tag with download attribute for file download
To allow users to download the PDF, use an<a>tag withhref="/docs/guide.pdf"and thedownloadattribute.Final Answer:
<a href="/docs/guide.pdf" download>Download Guide</a> -> Option AQuick Check:
Use leading slash and download attribute on anchor tag [OK]
- Omitting leading slash in href
- Including 'public' in URL path
- Using Next.js Link for static file downloads
Ready to prove it?
Pass the test and this pattern moves unknown
