The standard indeterminate cue for a page transition or route change — "something's happening, duration unknown." Once bytes can be counted, as in an upload, a determinate progress-bar in the same spot serves the user far better.
Borrowed from the Material Design spec: two bars sit absolutely positioned inside a track, each animating transform: scaleX and translateX on a different duration and start offset. The timings have to overlap so the next bar appears before the first one shrinks away, which is what reads as continuous rather than choppy.
Skip it for loads under 200ms, and pair it with a skeleton for a long transition covering most of the screen. role="progressbar" is misleading when there's no real progress to report — give the container role="status", aria-live="polite" and aria-busy="true" instead. Under prefers-reduced-motion, you can replace the two moving bars with a faint pulse across the whole track.