Add user language segmentation to the home-page-view event (#28910)

* adding server side events language accept information for the events and domain in event segmentation

* only sending the first language

* adding fixes for tests

* adding domain for plans-page-view and paywall-plans-page-view

* adding domain for gallery-page-view

* adding it for payment-page-view

* rename variable

* removing language from login-page-view

* adding a fallback value

* removing domain from test

* removing extra comment

* adding test host

* removing extra console added by mistake

* format:fix

GitOrigin-RevId: d1a1a30e4635abdc2b93f88de14a1d8937f974c8
This commit is contained in:
Davinder Singh
2025-10-16 08:07:08 +00:00
committed by Copybot
parent 9c557a0e78
commit d56de64811
4 changed files with 34 additions and 1 deletions
@@ -17,9 +17,13 @@ function recordUTMTags() {
if (utmValues) {
const path = new URL(req.url, Settings.siteUrl).pathname
const host = req.headers.host
const domain = host?.split('.')[0]
AnalyticsManager.recordEventForSession(req.session, 'page-view', {
path,
...utmValues,
domain,
})
const propertyValue = `${utmValues.utm_source || 'N/A'};${
@@ -28,8 +28,15 @@ async function index(req, res) {
async function home(req, res) {
if (Features.hasFeature('homepage') && homepageExists) {
const acceptLanguage = req.headers['accept-language'] || 'en' // returns in format => en-GB,en-US;q=0.9,en;q=0.8
const language = acceptLanguage.split(',')[0].split(';')[0].trim() // filters the first language
const host = req.headers.host
const domain = host?.split('.')[0]
AnalyticsManager.recordEventForSession(req.session, 'home-page-view', {
page: req.path,
language,
domain,
})
const hotjarAssignment = await SplitTestHandler.promises.getAssignment(
@@ -213,7 +213,16 @@ async function userSubscriptionPage(req, res) {
isInTrial
)
AnalyticsManager.recordEventForSession(req.session, 'subscription-page-view')
const host = req.headers.host
const domain = host?.split('.')[0]
AnalyticsManager.recordEventForSession(
req.session,
'subscription-page-view',
{
domain,
}
)
const groupPlansDataForDash = formatGroupPlansDataForDash()
@@ -77,6 +77,10 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
utm_content: 'foo-bar',
utm_term: 'overridden',
}
ctx.req.headers = {
host: 'test-domain.overleaf.com',
}
ctx.middleware(ctx.req, ctx.res, ctx.next)
})
@@ -101,6 +105,7 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
utm_campaign: 'Some Campaign',
utm_content: 'foo-bar',
utm_term: 'overridden',
domain: 'test-domain',
}
)
})
@@ -124,6 +129,9 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
utm_campaign: 'Some Campaign',
utm_term: 'foo',
}
ctx.req.headers = {
host: 'test-domain.overleaf.com',
}
ctx.middleware(ctx.req, ctx.res, ctx.next)
})
@@ -146,6 +154,7 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
utm_medium: 'Facebook',
utm_campaign: 'Some Campaign',
utm_term: 'foo',
domain: 'test-domain',
}
)
})
@@ -169,6 +178,9 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
utm_campaign: 'Some Campaign',
other_param: 'some-value',
}
ctx.req.headers = {
host: 'test-domain.overleaf.com',
}
ctx.middleware(ctx.req, ctx.res, ctx.next)
})
@@ -190,6 +202,7 @@ describe('AnalyticsUTMTrackingMiddleware', function () {
path: '/project',
utm_medium: 'Facebook',
utm_campaign: 'Some Campaign',
domain: 'test-domain',
}
)
})