Answer
Yes. A link inside a Turbo Frame is handled by Turbo Drive with frame scoping. The server response must contain a <turbo-frame id="..."> element whose id matches the originating frame. If that element is absent, has a different id, or the response is a full HTML document, Turbo discards the partial update and performs a full page visit.
Disabling Turbo on the link isolates the cause. Adding data-turbo="false" to the anchor forces normal browser navigation. If the navigation then works as expected, Turbo Drive frame handling is responsible for the fallback.
Confirmed facts
- Turbo Drive intercepts same-origin link clicks and, when the click originates inside a
<turbo-frame id="frame-id">, it expects the response to include a <turbo-frame id="frame-id"> with the same id. - A
data-turbo-frame attribute on the link overrides the default target frame. The id used in that attribute must match the id in the response <turbo-frame>. - No console error is guaranteed for a missing or mismatched frame target. The fallback is silent and can look like a server or network issue.
Likely explanation for this case
The fallback is most likely a markup mismatch or response shape issue, not a Turbo configuration error. Common triggers are:
- Response does not contain a
<turbo-frame id="..."> at all. - Response contains a
<turbo-frame> with a different id than the source frame or the link's data-turbo-frame. - Response returns a full document with
<html><head><body> wrapping the frame. In many Turbo releases this causes a full visit even if a matching frame element is present. - JavaScript error on the page prevents Turbo from processing the response.
Frame matching and fallback rules are version-sensitive. Behavior can differ between Turbo major versions.
Steps needed for this case
- Log
Turbo.version in the console to confirm the installed major version. - Inspect the source frame: note the
id of the <turbo-frame> containing the link and any data-turbo-frame on the link. - Open the network response for the clicked link and verify the body contains exactly one
<turbo-frame id="same-id"> with no surrounding full document markup. - Temporarily add
data-turbo="false" to the link. If navigation becomes a normal full load, Turbo interception is confirmed.
One missing diagnostic detail that changes the recommendation: the installed Turbo major version. Confirming the version is needed before relying on specific frame fallback semantics and response shape expectations.