You’ve bumped into a hard limitation of WidgetKit. According to Apple’s official documentation:
“Interactions with a toggle or button always guarantee a timeline reload.”
That means every AppIntent you attach to a widget will always trigger getTimeline() afterwards. As far as I know there is no supported way to mark an AppIntent as “side-effect only” or skip the reload. This is by design: WidgetKit treats widget controls as state-changing and therefore refreshes the timeline to ensure the widget reflects the latest state.
Alternative approaches like Link(destination:) don’t cause a timeline refresh, but they necessarily open the app — which doesn’t meet your requirement of sending analytics directly from the widget.