Yes, for client-side (JavaScript) tracking, UTM parameters are persisted and behave effectively like a “last non-direct click” model by default:
When a page loads with UTM parameters, the JS SDK automatically captures them and stores them as super properties in the user’s cookie/local storage. These super properties are then appended to all subsequent events from that browser. [Track UTM tags; Web attribution]
If the user later lands on a URL with new UTM parameters, the stored values are updated to the new ones, and those new values are then sent with subsequent events. This aligns with a last-touch / last-non-direct style model. [Troubleshooting FAQ; Web attribution]
So yes: UTM values are stored in the user’s cookie and appended to events until a new set of UTM parameters is detected.
Note: Mixpanel now recommends disabling this persistence (stop_utm_persistence: true in mixpanel.init) when you want cleaner multi-touch attribution using the Attribution feature, since that feature computes attribution from the raw UTM values on each event rather than from persisted super properties. [Track UTM tags; Attribution feature]