Using the Public Directory for Static Files in Next.js
📖 Scenario: You are building a simple Next.js website that needs to show a logo image on the homepage. The image file will be stored in the public directory, which is the special folder for static files like images, icons, and fonts.
🎯 Goal: Learn how to place an image file in the public directory and display it on a Next.js page using the Image component with the correct path.
📋 What You'll Learn
Create a public directory in the Next.js project root
Add an image file named logo.png inside the public directory
Create a Next.js page component that imports Image from next/image
Use the Image component to display logo.png from the public folder with alt text
💡 Why This Matters
🌍 Real World
Websites often need to serve images and static files efficiently. The public directory in Next.js is the standard way to do this.
💼 Career
Knowing how to manage static assets and use Next.js Image optimization is important for frontend developers working with React and Next.js.
Progress0 / 4 steps
1
Create the public directory and add the image
Create a folder named public in the project root and add an image file named logo.png inside it. This step is done outside the code editor.
NextJS
Hint
Use your file explorer or terminal to create the public folder and place logo.png inside it.
2
Import the Image component
In the pages/index.js file, import the Image component from next/image by writing import Image from 'next/image'.
NextJS
Hint
The Image component helps optimize images in Next.js.
3
Add the Image component to the page
Create a default exported function component named Home that returns JSX with the Image component. Use src="/logo.png", alt="Company Logo", width={200}, and height={100} as props inside the Image component.
NextJS
Hint
The src path starts with a slash because it refers to the public folder root.
4
Complete the page with semantic HTML
Wrap the Image component inside a <main> tag and add a heading <h1>Welcome to Our Site</h1> above the image inside the Home component's return statement.
NextJS
Hint
Using semantic tags like <main> and headings improves accessibility.
Practice
(1/5)
1. What is the main purpose of the public directory in a Next.js project?
easy
A. To keep React components for rendering
B. To hold server-side API route files
C. To store static files like images and icons accessible via URL paths
D. To store environment configuration files
Solution
Step 1: Understand the role of the public directory
The public folder is designed to hold static files such as images, icons, and documents.
Step 2: Recognize how files in public are accessed
Files inside public are accessible directly via URL paths starting with /.
Final Answer:
To store static files like images and icons accessible via URL paths -> Option C
Quick Check:
public folder = static files access [OK]
Hint: Remember: public folder serves static files directly via URLs [OK]
Common Mistakes:
Confusing public with components folder
Thinking public holds API routes
Assuming public stores config files
2. Which of the following is the correct way to reference an image named logo.png stored inside the public folder in a Next.js component?
easy
A. <img src="/logo.png" alt="Logo" />
B. <img src="../public/logo.png" alt="Logo" />
C. <img src="./logo.png" alt="Logo" />
D. <img src="public/logo.png" alt="Logo" />
Solution
Step 1: Understand URL referencing for public files
Files in the public folder are referenced by their path starting with /, without including the folder name.
Step 2: Apply correct src attribute
To reference logo.png in public, use /logo.png as the src value.
Final Answer:
<img src="/logo.png" alt="Logo" /> -> Option A
Quick Check:
Use leading slash and omit 'public' folder name [OK]
Hint: Use src starting with '/' and omit 'public' folder name [OK]
Common Mistakes:
Including 'public' in the path
Using relative paths like './' or '../'
Forgetting the leading slash
3. Given the following Next.js component code, what will be the rendered image URL in the browser?
Hint: Files in public map directly to root URL paths [OK]
Common Mistakes:
Adding 'public' to URL path
Using relative or src folder paths
Confusing file location with URL
4. You added a file favicon.ico inside the public folder but your browser shows a 404 error when accessing /favicon.ico. What is the most likely cause?
medium
A. The file is inside a subfolder of public but URL does not include it
B. The file name is misspelled or has wrong extension
C. Next.js requires importing favicon in _app.js to serve it
D. You need to restart the Next.js server after adding files to public
Solution
Step 1: Check file location and URL path
If the file is directly inside public, accessing /favicon.ico should 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 like favicon.ico.png or fav-icon.ico.
Final Answer:
The file name is misspelled or has wrong extension -> Option B
Quick Check:
Check exact file name and extension for 404 errors [OK]
Hint: Check exact file name and extension if 404 occurs [OK]
Common Mistakes:
Assuming Next.js needs imports for public files
Forgetting to include subfolder in URL
Restarting server unnecessarily
5. You want to serve a PDF file named 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?
hard
A. <a href="/docs/guide.pdf" download>Download Guide</a>
B. <a href="docs/guide.pdf" download>Download Guide</a>
C. <Link href="/docs/guide.pdf">Download Guide</Link>
D. <a href="/public/docs/guide.pdf" download>Download Guide</a>
Solution
Step 1: Reference public files with leading slash and no 'public' folder name
Files inside public are accessed by URL paths starting with / and omit the public folder name.
Step 2: Use anchor tag with download attribute for file download
To allow users to download the PDF, use an <a> tag with href="/docs/guide.pdf" and the download attribute.
Final Answer:
<a href="/docs/guide.pdf" download>Download Guide</a> -> Option A
Quick Check:
Use leading slash and download attribute on anchor tag [OK]
Hint: Use <a> with href starting '/' and download attribute [OK]
Common Mistakes:
Omitting leading slash in href
Including 'public' in URL path
Using Next.js Link for static file downloads
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.