Let's look up Wikipedia article "Static web page"
> A static web page (sometimes called a flat page or a stationary page) is a web page that is delivered to the user's web browser exactly as stored,[1] in contrast to dynamic web pages which are generated by a web application.[2]
what Next.js and Gatsby actually do is they statically source your content and generate a dynamic React App
the generated React App then adds dynamic functionality, for example if you navigate the page instead of redirecting you to the page itself, it will redirect to a virtual route
once you hit the virtual route, Gatsby for example will fetch a .json file with the page contents and render it dynamically via React
now, what's the deal? here's the deal: if your website needs javascript to work, it is not static per se!
if your aim is to create a truly static site, you should use a real static site generator, examples: Hugo, Zola and Jekyll
stop calling Next.js and Gatsby static site generators! They are not, they are React App generators with statically sourced (bundled) content
They are static site generators, and for many content sites like blogs etc, most features (linking etc) will work even if React does not load/hydrate, like a traditional SSG.
Navigation does not 100% need to be SPA. The SPA mode can be seen as a progressive enhancement.
For sure, if you want to have 100% of your React-based site to work with JS disabled it requires additional care to ensure all/most functionalities work without JS. Some things are impossible or quite hard to achieve, but most content-centric sites can work without JS.
Disclaimer, I'm the maintainer of Docusaurus.io, a popular Facebook/Meta doc SSG based on React, powering the docs of React-Native, Babel, Prettier, Supabase... Docusaurus is content-centric and considering React hydration as a progressive enhancement is an important part of this project for me.
Go to docusaurus.io and disable JS, see for yourself that most of the things will keep working and the experience remains great even if React is never loaded/executed. A few things don't work yet like the dark theme switch or the search engine, but I have good plans to make this work.
I believe in the future we'll see more and more React as a progressive enhancement. Other React frameworks such as Remix (not SSG) are also largely advocating for progressive enhancement.
You talk about "virtual route" but the thing is that the statically generated html page and the virtual route renders exactly the same thing.
"if your website needs javascript to work, it is not static per se!": this assumes that all Zola/Hugo/Jekyll sites will work fine with JS disabled, which is not always the case. Similarly, it is possible to build features on a Hugo site that are not compatible with progressive enhancement. If you add an Algolia search input for example, will it work without JS on your Hugo site? React or not, it won't.