Bird
Raised Fist0
NextJSframework~10 mins

Public directory for static files in NextJS - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Public directory for static files
Place files in /public folder
↓
Next.js builds app
↓
Files copied as-is to root URL
↓
Access files via /filename.ext URL
↓
Browser loads static file directly
Files placed in the /public folder are served directly at the root URL path, allowing easy access to static assets.
Execution Sample
NextJS
public/
  logo.png

In component:
<img src="/logo.png" alt="Logo" />
This shows placing an image in the public folder and referencing it with a root-relative URL in a component.
Execution Table
StepActionFile LocationURL AccessedResult
1Place logo.png in /public folder/public/logo.pngN/AFile ready for serving
2Next.js build copies /public files/public/logo.pngN/AFile available at root URL
3Component uses <img src="/logo.png" />N/A/logo.pngBrowser requests /logo.png
4Server serves static file/public/logo.png/logo.pngImage loads in browser
5User sees image on pageN/AN/AStatic image displayed
6Try accessing /logo.png directlyN/A/logo.pngImage loads without app code
7Try accessing file not in /publicN/A/notfound.png404 error - file not found
💡 Static files must be in /public to be served; otherwise, 404 occurs.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 4Final
File locationN/A/public/logo.png/public/logo.png/public/logo.png/public/logo.png
URL accessedN/AN/AN/A/logo.png/logo.png
File servedNoNoYesYesYes
Key Moments - 2 Insights
Why can't I access a static file if it's not in the /public folder?
Only files inside /public are served as static assets. Files outside are not copied to the root URL, so accessing them returns 404 (see execution_table step 7).
How do I reference a static file in my component?
Use a root-relative URL starting with a slash, like /logo.png, matching the file name in /public (see execution_table step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does the browser request the static file URL?
AStep 3
BStep 2
CStep 5
DStep 7
💡 Hint
Check the 'URL Accessed' column to see when /logo.png is requested.
According to the variable tracker, what is the file location after step 2?
AN/A
B/public/logo.png
C/logo.png
D/notfound.png
💡 Hint
Look at the 'File location' row under 'After Step 2' in variable_tracker.
If you place a file outside /public, what will happen when you try to access it via URL?
AIt will load normally
BIt will redirect to homepage
CIt will return 404 error
DIt will download automatically
💡 Hint
See execution_table step 7 for what happens when file is not in /public.
Concept Snapshot
Next.js serves static files from the /public folder.
Files placed here are accessible at root URL paths.
Reference them with root-relative URLs like /file.ext.
Files outside /public are not served and cause 404 errors.
Use /public for images, fonts, and other static assets.
Full Transcript
In Next.js, the public directory is a special folder where you put static files like images or fonts. When you build your app, Next.js copies these files so they are available at the root URL path. For example, if you put logo.png inside the public folder, you can access it in your app with the URL /logo.png. This means in your component you write <img src="/logo.png" alt="Logo" />. The browser will request /logo.png, and the server will serve the static file directly. If you try to access a file not inside the public folder, Next.js will not serve it and you will get a 404 error. This setup makes it easy to manage static assets and reference them consistently in your app.

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