Bird
Raised Fist0
NextJSframework~3 mins

Why Public directory for static files in NextJS? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

Discover how a simple folder can save you hours of debugging broken image links!

The Scenario

Imagine you have images, icons, or fonts that your website needs to show. You try to put them in your project folders and write code to load each file manually with complex paths.

The Problem

Manually managing static files is confusing and error-prone. Paths can break easily, files might not load, and you waste time fixing broken links instead of building features.

The Solution

Next.js provides a public directory where you can simply drop static files. These files are served automatically at the root URL, making access easy and reliable.

Before vs After
✗ Before
const logo = require('../assets/images/logo.png');
<img src={logo} alt="Logo" />
✓ After
<img src="/logo.png" alt="Logo" />
What It Enables

This lets you focus on building your app without worrying about file paths or server setup for static assets.

Real Life Example

When building a company website, you can put your logo, favicon, and background images in the public folder and reference them easily in your pages.

Key Takeaways

Managing static files manually is tricky and breaks easily.

The public directory in Next.js serves files automatically at the root URL.

This simplifies file access and speeds up development.

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

  1. Step 1: Understand the role of the public directory

    The public folder is designed to hold static files such as images, icons, and documents.
  2. Step 2: Recognize how files in public are accessed

    Files inside public are accessible directly via URL paths starting with /.
  3. Final Answer:

    To store static files like images and icons accessible via URL paths -> Option C
  4. 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

  1. 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.
  2. Step 2: Apply correct src attribute

    To reference logo.png in public, use /logo.png as the src value.
  3. Final Answer:

    <img src="/logo.png" alt="Logo" /> -> Option A
  4. 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?
export default function Logo() {
  return <img src="/images/avatar.png" alt="User Avatar" />
}

Assuming avatar.png is located inside public/images folder.
medium
A. http://localhost:3000/src/images/avatar.png
B. http://localhost:3000/public/images/avatar.png
C. http://localhost:3000/avatar.png
D. http://localhost:3000/images/avatar.png

Solution

  1. Step 1: Understand public folder URL mapping

    Files inside public are served from the root URL path, so /images/avatar.png maps to public/images/avatar.png.
  2. Step 2: Determine the full URL

    When running locally, the base URL is http://localhost:3000, so the full URL is http://localhost:3000/images/avatar.png.
  3. Final Answer:

    http://localhost:3000/images/avatar.png -> Option D
  4. Quick Check:

    public/images/avatar.png = /images/avatar.png URL [OK]
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

  1. 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.
  2. 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.
  3. Final Answer:

    The file name is misspelled or has wrong extension -> Option B
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    <a href="/docs/guide.pdf" download>Download Guide</a> -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard