How can I have multiple caches of the same page with different query arguments?
You have to add a cache context for the query parameter version to the page:

function THEME_preprocess_page(&amp;$variables) {

  $variables['#cache']['contexts'][] = 'url.query_args:version';

}


The context will then be used to vary the cached pages by this query argument.