Here's my typical technical setup for small and medium sized websites:

Back-end:
Headless CMS, usually Prismic or Storyblok.
PHP on the server to generate the website.

Front-end:
Static website (html,css and javascript).
No need for advanced routing or server setup (same hosting and server as Wordpress, Drupal etc. can be used).
Various frameworks and libraries when relevant (GSAP, Three.js etc .)

When a CMS editor publishes new content from the CMS, a webhook is calling a script on our server. This script loads all data from the CMS and generates static files on the server. The process is usually very fast (less than 2 seconds), as opposed to many popular frameworks I have tested. Editors can preview/view updated content easily and have a fast and friction-less editing experience.

The benefits from a setup like the above are primarily:


Downsides to a headless setup:

Please have a look at my portfolio if you are interested in more.