From ff2fb29253150c7de6dacd4a46c35bd3e82934c5 Mon Sep 17 00:00:00 2001
From: rachelcg <102955985+rachelcg@users.noreply.github.com>
Date: Sun, 29 Oct 2023 05:16:56 +0800
Subject: [PATCH] feat: Remove default "robots" meta (#1166)
---
cypress/e2e/norobots.spec.js | 38 +++++++++++++++++++++++++++++++++
e2e/pages/_app.tsx | 1 +
e2e/pages/norobots/index.tsx | 12 +++++++++++
e2e/pages/norobots/nofollow.tsx | 12 +++++++++++
e2e/pages/norobots/noindex.tsx | 12 +++++++++++
e2e/pages/norobots/robots.tsx | 24 +++++++++++++++++++++
src/meta/buildTags.tsx | 10 ++++++++-
src/meta/defaultSEO.tsx | 2 ++
src/types.ts | 1 +
9 files changed, 111 insertions(+), 1 deletion(-)
create mode 100644 cypress/e2e/norobots.spec.js
create mode 100644 e2e/pages/norobots/index.tsx
create mode 100644 e2e/pages/norobots/nofollow.tsx
create mode 100644 e2e/pages/norobots/noindex.tsx
create mode 100644 e2e/pages/norobots/robots.tsx
diff --git a/cypress/e2e/norobots.spec.js b/cypress/e2e/norobots.spec.js
new file mode 100644
index 00000000..5814effc
--- /dev/null
+++ b/cypress/e2e/norobots.spec.js
@@ -0,0 +1,38 @@
+describe('SEO Meta No Robots', () => {
+ it('App loads', () => {
+ cy.visit('http://localhost:3000');
+ cy.get('h1').should('contain', 'Default SEO');
+ });
+
+ it('SEO norobots', () => {
+ cy.visit('http://localhost:3000/norobots');
+ cy.get('head meta[name="robots"]').should('not.exist');
+ });
+
+ it('SEO overrides norobots with nofollow correctly', () => {
+ cy.visit('http://localhost:3000/norobots/nofollow');
+ cy.get('head meta[name="robots"]').should(
+ 'have.attr',
+ 'content',
+ 'index,nofollow',
+ );
+ });
+
+ it('SEO overrides norobots with nofollow correctly', () => {
+ cy.visit('http://localhost:3000/norobots/noindex');
+ cy.get('head meta[name="robots"]').should(
+ 'have.attr',
+ 'content',
+ 'noindex,follow',
+ );
+ });
+
+ it('SEO overrides norobots with robots props correctly', () => {
+ cy.visit('http://localhost:3000/norobots/robots');
+ cy.get('head meta[name="robots"]').should(
+ 'have.attr',
+ 'content',
+ 'index,follow,nosnippet,max-snippet:-1,max-image-preview:none,noarchive,noimageindex,max-video-preview:-1,notranslate',
+ );
+ });
+});
diff --git a/e2e/pages/_app.tsx b/e2e/pages/_app.tsx
index 1aeec902..234e722a 100644
--- a/e2e/pages/_app.tsx
+++ b/e2e/pages/_app.tsx
@@ -16,6 +16,7 @@ function MyApp({ Component, pageProps, router }: AppProps) {
router.pathname === '/dangerously/noindex' ||
router.pathname === '/dangerously/nofollow-and-noindex'
}
+ norobots={router.pathname.startsWith('/norobots')}
/>
>
diff --git a/e2e/pages/norobots/index.tsx b/e2e/pages/norobots/index.tsx
new file mode 100644
index 00000000..678bdc32
--- /dev/null
+++ b/e2e/pages/norobots/index.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { NextSeo } from '../../..';
+import Links from '../../components/links';
+
+const NoRobots = () => (
+ <>
+
+
norobots
+
+ >
+);
+export default NoRobots;
diff --git a/e2e/pages/norobots/nofollow.tsx b/e2e/pages/norobots/nofollow.tsx
new file mode 100644
index 00000000..a9861884
--- /dev/null
+++ b/e2e/pages/norobots/nofollow.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { NextSeo } from '../../..';
+import Links from '../../components/links';
+
+const NoRobotsNoFollow = () => (
+ <>
+
+ norobots and nofollow
+
+ >
+);
+export default NoRobotsNoFollow;
diff --git a/e2e/pages/norobots/noindex.tsx b/e2e/pages/norobots/noindex.tsx
new file mode 100644
index 00000000..020d2db8
--- /dev/null
+++ b/e2e/pages/norobots/noindex.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { NextSeo } from '../../..';
+import Links from '../../components/links';
+
+const NoRobotsNoIndex = () => (
+ <>
+
+ norobots and noindex
+
+ >
+);
+export default NoRobotsNoIndex;
diff --git a/e2e/pages/norobots/robots.tsx b/e2e/pages/norobots/robots.tsx
new file mode 100644
index 00000000..7c8798a0
--- /dev/null
+++ b/e2e/pages/norobots/robots.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import { NextSeo } from '../../..';
+import Links from '../../components/links';
+
+const Robots = () => (
+ <>
+
+ Norobots with Robots meta properties
+
+ >
+);
+
+export default Robots;
diff --git a/src/meta/buildTags.tsx b/src/meta/buildTags.tsx
index 0c395a20..32e07b61 100644
--- a/src/meta/buildTags.tsx
+++ b/src/meta/buildTags.tsx
@@ -4,6 +4,7 @@ const defaults = {
templateTitle: '',
noindex: false,
nofollow: false,
+ norobots: false,
defaultOpenGraphImageWidth: 0,
defaultOpenGraphImageHeight: 0,
defaultOpenGraphVideoWidth: 0,
@@ -128,7 +129,10 @@ const buildTags = (config: BuildTagsParams) => {
? defaults.nofollow || config.dangerouslySetAllPagesToNoFollow
: config.nofollow;
+ const norobots = config.norobots || defaults.norobots;
+
let robotsParams = '';
+
if (config.robotsProps) {
const {
nosnippet,
@@ -152,6 +156,10 @@ const buildTags = (config: BuildTagsParams) => {
}`;
}
+ if (config.norobots) {
+ defaults.norobots = true;
+ }
+
if (noindex || nofollow) {
if (config.dangerouslySetAllPagesToNoIndex) {
defaults.noindex = true;
@@ -169,7 +177,7 @@ const buildTags = (config: BuildTagsParams) => {
}${robotsParams}`}
/>,
);
- } else {
+ } else if (!norobots || robotsParams) {
tagsToRender.push(
{
return (
);
};
diff --git a/src/types.ts b/src/types.ts
index 90abbbc6..dbfe2ab6 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -498,6 +498,7 @@ export interface DefaultSeoProps {
titleTemplate?: string;
themeColor?: string;
defaultTitle?: string;
+ norobots?: boolean;
robotsProps?: AdditionalRobotsProps;
description?: string;
canonical?: string;