Shopify has a default way of generating preview links, which works great. However, the link is only valid for two days. We often shared a link with a client or internal team, and by the time the other party got to it, it had already expired and didn't work.
However, there is a small "hack" you can use to generate a preview link that never expires.
- Go to your store admin > Sales channels > Online store > Themes
- Find the theme you want to share in the preview and click on the three dots
- Right-click on Preview and select "Copy Link Address"
- Share the copied URL with the other party

The only drawback is the previewed theme can't be the one that is live. It needs to be any theme from your theme library.
Explanation: Why is the preview URL working forever
There are two URLs when it comes to theme previews:
- The default one, which looks like your-store.com/?_ab=0&_fd=0&_sc=1 and expires in two days
- The one that generates the default one and looks like your-store.com/en?_ab=0&_fd=0&_sc=1&preview_theme_id=144381078155
The second one actually generates the first one. So once it is entered into the browser, the preview link is generated from scratch and works forever.