diff --git a/packages/sui-js/src/ua-parser/index.js b/packages/sui-js/src/ua-parser/index.js
index af9308f62..df5cb5cee 100644
--- a/packages/sui-js/src/ua-parser/index.js
+++ b/packages/sui-js/src/ua-parser/index.js
@@ -6,7 +6,8 @@ export const LEGITIMATE_CRAWLER_USER_AGENTS = [
'bingbot',
'linkedinbot',
'mediapartners-google',
- 'debugbear'
+ 'debugbear',
+ 'spider'
]
export const stats = userAgent => {
diff --git a/packages/sui-react-web-vitals/src/index.js b/packages/sui-react-web-vitals/src/index.js
index 9ba2d2d14..d137e816b 100644
--- a/packages/sui-react-web-vitals/src/index.js
+++ b/packages/sui-react-web-vitals/src/index.js
@@ -197,6 +197,14 @@ export default function WebVitalsReporter({
}
]
: []),
+ ...(typeof browser?.isBot === 'boolean'
+ ? [
+ {
+ key: 'is_bot',
+ value: browser.isBot
+ }
+ ]
+ : []),
{
key: 'browserEngine',
value: browserEngine
diff --git a/packages/sui-react-web-vitals/test/browser/indexSpec.js b/packages/sui-react-web-vitals/test/browser/indexSpec.js
index c939c949c..580ad5def 100644
--- a/packages/sui-react-web-vitals/test/browser/indexSpec.js
+++ b/packages/sui-react-web-vitals/test/browser/indexSpec.js
@@ -250,6 +250,79 @@ describe('WebVitalsReporter', () => {
})
})
+ it('should not include isBot tag when browser.isBot is not set', async () => {
+ const logger = {distribution: sinon.spy()}
+ const reporter = {
+ onTTFB: fn => {
+ fn({name: 'TTFB', value: 10, entries: [], attribution: {}})
+ }
+ }
+ render(, {logger})
+ await waitFor(() => [
+ expect(
+ logger.distribution.calledWith({
+ name: 'cwv',
+ amount: 10,
+ tags: [
+ {key: 'name', value: 'ttfb'},
+ {key: 'pathname', value: '/'},
+ {key: 'browserEngine', value: 'Other'}
+ ]
+ })
+ ).to.be.true
+ ])
+ })
+
+ it('should include isBot: true tag when browser.isBot is true', async () => {
+ const logger = {distribution: sinon.spy()}
+ const reporter = {
+ onTTFB: fn => {
+ fn({name: 'TTFB', value: 10, entries: [], attribution: {}})
+ }
+ }
+ const browser = {isBot: true}
+ render(, {logger, browser})
+ await waitFor(() => [
+ expect(
+ logger.distribution.calledWith({
+ name: 'cwv',
+ amount: 10,
+ tags: [
+ {key: 'name', value: 'ttfb'},
+ {key: 'pathname', value: '/'},
+ {key: 'is_bot', value: true},
+ {key: 'browserEngine', value: 'Other'}
+ ]
+ })
+ ).to.be.true
+ ])
+ })
+
+ it('should include isBot: false tag when browser.isBot is false', async () => {
+ const logger = {distribution: sinon.spy()}
+ const reporter = {
+ onTTFB: fn => {
+ fn({name: 'TTFB', value: 10, entries: [], attribution: {}})
+ }
+ }
+ const browser = {isBot: false}
+ render(, {logger, browser})
+ await waitFor(() => [
+ expect(
+ logger.distribution.calledWith({
+ name: 'cwv',
+ amount: 10,
+ tags: [
+ {key: 'name', value: 'ttfb'},
+ {key: 'pathname', value: '/'},
+ {key: 'is_bot', value: false},
+ {key: 'browserEngine', value: 'Other'}
+ ]
+ })
+ ).to.be.true
+ ])
+ })
+
it('should track TTFB using logger distribution with browser in context', async () => {
const logger = {
distribution: sinon.spy()