iframe is definitely the classical way of including a Shiny application into another page. You can see this in a few different places on the shiny.rstudio.com website.
The other option you might explore, depending on the level of reactivity you need, is htmlwidgets. HTMLWidgets can be rendered using R, Plumber, R Markdown, or Shiny, but have entirely client-side interactivity. Some examples are at: https://www.htmlwidgets.org/showcase_leaflet.html
There is no server side component because all display and interactivity is taken care of with HTML and JavaScript. This means that these objects do tend to be a bit larger, though. If you want to include a HTML Widget into a different application, you can use an iframe much like a Shiny app, but you can also use something like a plumber API to deliver the HTML and JavaScript payload for the widget over a REST-based endpoint. This allows R to generate the HTML / JavaScript, but still display the widget in a different application without an R interpreter and without an iframe.