In a discussion with the team and the community, we have decided to migrate nuxt-simple-robots into the @nuxtjs/robots module.
This will allow me to better maintain the module and provide a more consistent experience across the Nuxt ecosystem.
To upgrade simply replace the dependency in package.json and update your nuxt.config.
- 'nuxt-simple-robots'
+ '@nuxtjs/robots'
If you're coming from nuxt-simple-robots then no other changes are needed. If you're coming from @nuxtjs/robots v3, then
the following breaking changes exist.
@nuxtjs/robots v3 breaking changesconfigPath config is no longer supported. For custom runtime config you should use Nitro Hooks.rules config is deprecated but will continue to work. Any BlankLine or Comment rules will no longer work.CleanParam, CrawlDelay and Disavow requires targeting the Yandex user agent.A new Nuxt composable useRobotsRule() has been introduced to allow you to access and modify the current robots rule for the current route.
import { useRobotsRule } from '#imports'
const rule = useRobotsRule()
// Ref<'noindex, nofollow'>
When loading in a robots.txt file, the module will now validate the file to ensure each of the disallow and allow paths are valid.
This will help you avoid errors from Google Search Console and Google Lighthouse.
The module now adds the meta tag to your site by default. The composable and component helpers used to define this previously have been deprecated.
<!-- Example for an indexable route -->
<meta name="robots" content="index, follow">
Adding the meta tag is important for pages that are prerendered as the X-Robots-Tag header is not available.
You can opt out with metaTags: false.
The module now integrates with nuxt-i18n.
This will automatically re-configure your allow and disallow rules to include the locale prefix if you have
omitted it.
export default defineNuxtConfig({
robots: {
allow: ['/about'],
disallow: ['/admin'],
},
i18n: {
strategy: 'prefix_except_default',
locales: ['en', 'fr'],
defaultLocale: 'en',
},
})
# robots.txt
User-agent: *
Allow: /about
Allow: /fr/about
Disallow: /admin
Disallow: /fr/admin
Learn more on the I18n Integration docs.
The module now integrates with @nuxt/content. Allowing you to use the robots frontmatter key within your markdown files.
---
robots: false
---
Learn more on the Nuxt Content docs.
The module now integrates with Nuxt DevTools.
You can visit the Robots tab and see if the current route is indexable, and if not, why.
In this version the new hook Nitro hook as introduced robots:config. This hook
will let you override the robots.txt data as a JavaScript object, instead of a string.
Like-wise you can now re-use any of the internal functions to parse, validate and generate
robots.txt data using the @nuxtjs/robots/util export.
import { parseRobotsTxt } from '@nuxtjs/robots/util'
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('robots:config', async (ctx) => {
if (ctx.context === 'robots.txt') {
const customRobotsTxt = await $fetch('https://example.com/robots.txt')
const parsed = parseRobotsTxt(config)
config.groups = defu(config.groups, parsed.groups)
}
})
})
The deprecated Nuxt Config site config keys have been removed: host, siteUrl, indexable.
You will need to configure these using Site Config.
export default defineNuxtConfig({
robots: {
- indexable: false,
},
site: {
+ indexable: false,
}
})
defineRobotMeta() and <RobotMeta>Because the module now uses a default meta tag, the defineRobotMeta() function and <RobotMeta> component are deprecated.
You should remove this from your code.
index Route RuleThe index route rule has been deprecated in favour of the robots rule. This provides
less ambiguity and more control over the rule.
export default defineNuxtConfig({
routeRules: {
'/admin': {
- index: false,
+ robots: false,
}
}
})