Bird
Raised Fist0
NextJSframework~5 mins

Robots.txt configuration in NextJS

Choose your learning style10 modes available
Introduction

The robots.txt file tells search engines which pages to look at or ignore on your website. It helps control what shows up in search results.

You want to hide private pages from search engines.
You want to prevent search engines from indexing duplicate content.
You want to allow all search engines to crawl your entire site.
You want to block specific bots from accessing your site.
You want to improve SEO by guiding search engines.
Syntax
NextJS
User-agent: [name]
Disallow: [path]
Allow: [path]
Sitemap: [url]

User-agent specifies which search engine bot the rule applies to.

Disallow tells bots not to visit certain pages or folders.

Examples
Blocks all bots from accessing the /private/ folder.
NextJS
User-agent: *
Disallow: /private/
Blocks only Google's bot from the /no-google/ folder.
NextJS
User-agent: Googlebot
Disallow: /no-google/
Blocks everything except the /public/ folder for all bots.
NextJS
User-agent: *
Allow: /public/
Disallow: /
Sample Program

This Next.js route returns a robots.txt file that blocks all bots from the /admin/ folder but allows crawling everywhere else. It also provides the sitemap URL.

NextJS
import { NextResponse } from 'next/server';

export function GET() {
  const robots = `User-agent: *
Disallow: /admin/
Allow: /
Sitemap: https://example.com/sitemap.xml`;
  return new NextResponse(robots, {
    status: 200,
    headers: {
      'Content-Type': 'text/plain'
    }
  });
}
OutputSuccess
Important Notes

Place the robots.txt file at the root of your website for search engines to find it.

Use Next.js API routes or middleware to serve robots.txt dynamically if needed.

Test your robots.txt using Google Search Console to ensure it works as expected.

Summary

Robots.txt controls what search engines can see on your site.

You can block or allow specific pages or bots.

In Next.js, you can serve robots.txt using an API route returning plain text.

Practice

(1/5)
1. What is the main purpose of a robots.txt file in a Next.js project?
easy
A. To manage server-side rendering
B. To tell search engines which pages to crawl or not crawl
C. To store user data securely
D. To style the website pages

Solution

  1. Step 1: Understand the role of robots.txt

    The robots.txt file is used to communicate with search engines about which parts of the website they can access.
  2. Step 2: Identify its purpose in Next.js

    In Next.js, it is used the same way as in other web projects: to allow or block search engine crawlers from certain pages.
  3. Final Answer:

    To tell search engines which pages to crawl or not crawl -> Option B
  4. Quick Check:

    robots.txt controls crawler access = D [OK]
Hint: robots.txt controls search engine access [OK]
Common Mistakes:
  • Confusing robots.txt with CSS or styling files
  • Thinking robots.txt stores user data
  • Assuming robots.txt manages rendering
2. Which of the following is the correct way to serve a robots.txt file using an API route in Next.js?
easy
A. export default function handler(req, res) { res.setHeader('Content-Type', 'text/html'); res.send('

User-agent: *

Disallow: /private

'); }
B. export default function handler(req, res) { res.setHeader('Content-Type', 'application/json'); res.send({ 'User-agent': '*', 'Disallow': '/private' }); }
C. export default function handler(req, res) { res.setHeader('Content-Type', 'text/plain'); res.send('User-agent: *\nDisallow: /private'); }
D. export default function handler(req, res) { res.setHeader('Content-Type', 'application/javascript'); res.send('User-agent: *\nDisallow: /private'); }

Solution

  1. Step 1: Check the content type for robots.txt

    The robots.txt file must be served as plain text, so the header should be text/plain.
  2. Step 2: Verify the response content format

    The content must be plain text lines, not JSON or HTML, so the string with newlines is correct.
  3. Final Answer:

    export default function handler(req, res) { res.setHeader('Content-Type', 'text/plain'); res.send('User-agent: *\nDisallow: /private'); } -> Option C
  4. Quick Check:

    robots.txt served as plain text = A [OK]
Hint: robots.txt must be served as plain text [OK]
Common Mistakes:
  • Using JSON or HTML content type instead of text/plain
  • Sending JSON object instead of plain text string
  • Forgetting to set Content-Type header
3. Given this Next.js API route code for robots.txt:
export default function handler(req, res) {
  res.setHeader('Content-Type', 'text/plain');
  res.send(`User-agent: *\nDisallow: /admin\nAllow: /public`);
}
What will search engines do when they read this robots.txt?
medium
A. They will block crawling of /admin but allow /public and other pages
B. They will allow crawling of all pages including /admin
C. They will block crawling of all pages including /public
D. They will ignore the file because of syntax errors

Solution

  1. Step 1: Read the robots.txt rules

    The file says User-agent: * (all bots), Disallow: /admin (block /admin), and Allow: /public (allow /public).
  2. Step 2: Understand the effect on crawling

    Search engines will not crawl /admin but will crawl /public and other pages not disallowed.
  3. Final Answer:

    They will block crawling of /admin but allow /public and other pages -> Option A
  4. Quick Check:

    Disallow /admin, Allow /public = C [OK]
Hint: Disallow blocks, Allow permits specific paths [OK]
Common Mistakes:
  • Thinking Allow overrides Disallow globally
  • Assuming all pages are blocked
  • Confusing syntax causing ignored file
4. You wrote this Next.js API route for robots.txt:
export default function handler(req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.send('User-agent: *\nDisallow: /secret')
}
But when you visit /api/robots.txt, the browser downloads a file instead of showing text. What is the likely cause?
medium
A. The API route is correct; browser behavior depends on browser settings
B. The Content-Type header should be 'text/html' not 'text/plain'
C. The browser treats text/plain as a download, so you must add Content-Disposition header
D. Missing semicolons cause syntax error

Solution

  1. Step 1: Check the code syntax

    The code is valid JavaScript; semicolons are optional in this context and do not cause errors.
  2. Step 2: Understand browser behavior for text/plain

    Browsers may display or download text/plain files depending on settings; this is normal and not an error in the API.
  3. Final Answer:

    The API route is correct; browser behavior depends on browser settings -> Option A
  4. Quick Check:

    text/plain may download = A [OK]
Hint: text/plain may download depending on browser [OK]
Common Mistakes:
  • Assuming missing semicolons cause errors
  • Changing Content-Type to text/html incorrectly
  • Adding unnecessary headers to force display
5. You want to block all search engines from crawling any page except the homepage and the /blog section in your Next.js app. Which robots.txt content served via API route achieves this correctly?
hard
A. User-agent: *\nDisallow: /\nAllow: /\nAllow: /blog/
B. User-agent: *\nDisallow: /\nAllow: /\nAllow: /blog
C. User-agent: *\nDisallow: /\nAllow: /index.html\nAllow: /blog/
D. User-agent: *\nDisallow: /\nAllow: /$\nAllow: /blog/

Solution

  1. Step 1: Understand the goal

    Block all pages except homepage and /blog section. Homepage is usually root path '/' only.
  2. Step 2: Use correct syntax for homepage allowance

    To allow only the homepage, use Allow: /$ which matches exactly the root URL, not all paths starting with '/'.
  3. Step 3: Allow /blog/ section

    Allowing /blog/ lets crawlers access all pages under /blog.
  4. Final Answer:

    User-agent: *\nDisallow: /\nAllow: /$\nAllow: /blog/ -> Option D
  5. Quick Check:

    Disallow all except root and /blog = B [OK]
Hint: Use Allow: /$ to allow only homepage [OK]
Common Mistakes:
  • Allowing '/' allows all pages, not just homepage
  • Using Allow: /blog without trailing slash misses subpages
  • Confusing homepage URL with /index.html
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