diff --git a/components/matomo-event/search-redirected.tsx b/components/matomo-event/search-redirected.tsx index 27e13cc6a..4d6d8c126 100644 --- a/components/matomo-event/search-redirected.tsx +++ b/components/matomo-event/search-redirected.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Siren, Siret } from '#utils/helpers'; import MatomoEvent from '.'; -const MatomoEventFromSearch: React.FC<{ sirenOrSiret: Siren | Siret }> = ({ +const MatomoEventFromRedirected: React.FC<{ sirenOrSiret: Siren | Siret }> = ({ sirenOrSiret, }) => ( = ({ /> ); -export default MatomoEventFromSearch; +export default MatomoEventFromRedirected; diff --git a/middleware.ts b/middleware.ts index 6724ed444..7c0ab5ab2 100644 --- a/middleware.ts +++ b/middleware.ts @@ -26,11 +26,29 @@ export async function middleware(request: NextRequest) { ); } - // https://github.com/vercel/next.js/issues/43704#issuecomment-1411186664 + /** + * pathname for /app router RSC + */ + // https://github.com/vercel/next.js/issues/43704#issuecomment-1411186664 // Store current request url in a custom header, which you can read later const requestHeaders = new Headers(request.headers); - requestHeaders.set('x-pathname', request.nextUrl.pathname); + requestHeaders.set('x-pathname', pathname); + + /** + * siren redirection logging + */ + const nextUrl = request.nextUrl; + const paramIsPresent = nextUrl.search.indexOf('redirected=1') > -1; + if (paramIsPresent) { + // store redirection status in custom header as referrer seems missing from headers in RSC + // isRedirected = params is present + previous page is coming from site + const referer = requestHeaders.get('referer') || ''; + const isFromSite = referer.indexOf('https://annuaire-entreprises') === 0; + + const isRedirected = paramIsPresent && isFromSite ? '1' : '0'; + requestHeaders.set('x-redirected', isRedirected); + } const response = NextResponse.next({ request: { @@ -44,6 +62,7 @@ export async function middleware(request: NextRequest) { sessionOptions ); await setVisitTimestamp(session); + return response; } diff --git a/utils/server-side-helper/app/extract-params.ts b/utils/server-side-helper/app/extract-params.ts index cf0fc4b5d..2db247748 100644 --- a/utils/server-side-helper/app/extract-params.ts +++ b/utils/server-side-helper/app/extract-params.ts @@ -14,10 +14,10 @@ const extractParamsAppRouter = ({ const slug = (params?.slug || '') as string; searchParams = searchParams ?? {}; const headersList = headers(); - const referer = headersList.get('referer') && ''; const userAgent = headersList.get('user-agent') || ''; - const isRedirected = !!referer && !!searchParams.redirected; + // cf middleware + const isRedirected = headersList.get('x-redirected') === '1'; const pageParam = (searchParams.page || '') as string; const page = parseIntWithDefaultValue(pageParam, 1); diff --git a/utils/server-side-helper/page/extract-params.ts b/utils/server-side-helper/page/extract-params.ts index 097cd0a8c..4bf15593e 100644 --- a/utils/server-side-helper/page/extract-params.ts +++ b/utils/server-side-helper/page/extract-params.ts @@ -5,9 +5,6 @@ import isUserAgentABot from '#utils/user-agent'; const extractParamsPageRouter = (context: GetServerSidePropsContext) => { const slug = (context?.params?.slug || '') as string; - const referer = context?.req?.headers?.referer; - const isRedirected = !!referer && !!context.query.redirected; - const pageParam = (context?.query?.page || '') as string; const page = parseIntWithDefaultValue(pageParam, 1); @@ -18,7 +15,6 @@ const extractParamsPageRouter = (context: GetServerSidePropsContext) => { return { slug, - isRedirected, page, isBot, };