@@ -14,7 +14,13 @@ import { installNuxtSiteConfig, updateSiteConfig } from 'nuxt-site-config-kit'
14
14
import { relative } from 'pathe'
15
15
import type { Preset } from 'unimport'
16
16
import { readPackageJSON } from 'pkg-types'
17
- import { asArray , indexableFromGroup , normaliseRobotsRouteRule , parseRobotsTxt , validateRobots } from './runtime/util'
17
+ import {
18
+ asArray ,
19
+ normaliseRobotsRouteRule ,
20
+ normalizeGroup ,
21
+ parseRobotsTxt ,
22
+ validateRobots ,
23
+ } from './runtime/util'
18
24
import { extendTypes , isNuxtGenerate , resolveNitroPreset } from './kit'
19
25
import type { Arrayable , AutoI18nConfig , Robots3Rules , RobotsGroupInput , RobotsGroupResolved } from './runtime/types'
20
26
import { NonHelpfulBots } from './const'
@@ -338,12 +344,7 @@ export default defineNuxtModule<ModuleOptions>({
338
344
config . disallow = asArray ( config . disallow )
339
345
config . allow = asArray ( config . allow )
340
346
// make sure any groups have a user agent, if not we set it to *
341
- config . groups = config . groups . map ( ( group ) => {
342
- group . userAgent = group . userAgent ? asArray ( group . userAgent ) : [ '*' ]
343
- group . disallow = asArray ( group . disallow )
344
- group . allow = asArray ( group . allow )
345
- return group
346
- } )
347
+ config . groups = config . groups . map ( normalizeGroup )
347
348
// find an existing stack with a user agent that is equal to "['*']"
348
349
const existingGroup = ( config . groups as RobotsGroupResolved [ ] ) . find ( stack => stack . userAgent . length === 1 && stack . userAgent [ 0 ] === '*' )
349
350
if ( existingGroup ) {
@@ -371,16 +372,16 @@ export default defineNuxtModule<ModuleOptions>({
371
372
// convert robot routeRules to header routeRules for static hosting
372
373
if ( config . header ) {
373
374
Object . entries ( nuxt . options . routeRules ) . forEach ( ( [ route , rules ] ) => {
374
- const url = route . split ( '/' ) . map ( segment => segment . startsWith ( ':' ) ? '*' : segment ) . join ( '/' )
375
- const groupIndexable = indexableFromGroup ( config . groups , url )
376
- const robotRules = normaliseRobotsRouteRule ( rules , groupIndexable , config . robotsDisabledValue , config . robotsEnabledValue )
377
- // single * is supported but ignored
375
+ const robotRule = normaliseRobotsRouteRule ( rules )
376
+ // only if a rule has been specified as robots.txt will cover disallows
377
+ if ( robotRule && ! robotRule . allow && robotRule . rule ) {
378
378
// @ts -expect-error untyped
379
- nuxt . options . routeRules [ route ] = defu ( {
380
- headers : {
381
- 'X-Robots-Tag' : robotRules . rule ,
382
- } ,
383
- } , nuxt . options . routeRules ?. [ route ] )
379
+ nuxt . options . routeRules [ route ] = defu ( {
380
+ headers : {
381
+ 'X-Robots-Tag' : robotRule . rule ,
382
+ } ,
383
+ } , nuxt . options . routeRules ?. [ route ] )
384
+ }
384
385
} )
385
386
}
386
387
@@ -389,9 +390,8 @@ export default defineNuxtModule<ModuleOptions>({
389
390
// iterate the route rules and add any non indexable rules to disallow
390
391
Object . entries ( nuxt . options . routeRules || { } ) . forEach ( ( [ route , rules ] ) => {
391
392
const url = route . split ( '/' ) . map ( segment => segment . startsWith ( ':' ) ? '*' : segment ) . join ( '/' )
392
- const groupIndexable = indexableFromGroup ( config . groups , url )
393
- const { indexable } = normaliseRobotsRouteRule ( rules , groupIndexable , config . robotsDisabledValue , config . robotsEnabledValue )
394
- if ( ! indexable ) {
393
+ const robotsRule = normaliseRobotsRouteRule ( rules )
394
+ if ( robotsRule && ! robotsRule . allow ) {
395
395
// single * is supported but ignored
396
396
extraDisallows . add ( url . replaceAll ( '**' , '*' ) )
397
397
}
@@ -410,6 +410,8 @@ export default defineNuxtModule<ModuleOptions>({
410
410
}
411
411
}
412
412
413
+ config . groups = config . groups . map ( normalizeGroup )
414
+
413
415
nuxt . options . runtimeConfig [ 'nuxt-robots' ] = {
414
416
version : version || '' ,
415
417
usingNuxtContent : hasNuxtModule ( '@nuxt/content' ) ,
0 commit comments