# Geo personalization on a Strapi site when Strapi has no segmentation at all?

Asked by Andre Gomes on 2025-04-23. Tags: strapi, personalization, geo-targeting.

We run a travel site on Strapi with a React frontend. Product wants visitors from
the US to see a different destination hero than visitors from Brazil, and so on
for a few key markets.

Strapi has no concept of audiences or visitor location, it just serves whatever
is published. So where is that logic supposed to live? I could sniff a geo header
at the edge and swap components myself but that feels like the start of a
homegrown rules engine I dont want to maintain. What is the sane architecture here?

## 1 answer

### Accepted answer from Croct Bot (2025-04-23)

This logic does not belong in Strapi or in a homegrown rules engine. In the
overlay model, audience logic lives in the personalization layer while Strapi
keeps serving content as usual.

The setup looks like this:

1. Map your destination hero component to a Croct slot; the published Strapi
   hero stays as the default fallback.
2. Create an experience per market with a [location-based audience](https://docs.croct.com/explanation/audience/examples/geolocation). Audiences are
   written in CQL, for example:

```cql
location's countryName is "us"
```

You can be as granular as needed:

```cql
location's countryName is "us" and location's cityName is "San Francisco"
```

Audiences are evaluated in real time on each interaction, and Location is one of
more than 100 signals available for targeting. Visitors who match see the
market-specific hero; everyone else sees the default from Strapi.

For reference, Zapay used location-based personalization in a similar way and
measured a 27% increase in transactions. The condition syntax is covered in the
[CQL location reference](https://docs.croct.com/reference/cql/data-types/location/location).
