diff --git a/opal/clearwater/application.rb b/opal/clearwater/application.rb
index <HASH>..<HASH> 100644
--- a/opal/clearwater/application.rb
+++ b/opal/clearwater/application.rb
@@ -24,6 +24,12 @@ module Clearwater
       router.application = self
       component.router = router if component
 
+      if `#@component.type === 'Thunk' && typeof #@component.render === 'function'`
+        warn "Application root component (#{@component}) points to a cached " +
+             "component. Cached components must not be persistent components, " +
+             "such as application roots or routing targets."
+      end
+
       @document.on 'visibilitychange' do
         if @render_on_visibility_change
           @render_on_visibility_change = false
diff --git a/opal/clearwater/router/route.rb b/opal/clearwater/router/route.rb
index <HASH>..<HASH> 100644
--- a/opal/clearwater/router/route.rb
+++ b/opal/clearwater/router/route.rb
@@ -9,6 +9,12 @@ module Clearwater
         @key = options.fetch(:key)
         @target = options.fetch(:target)
         @parent = options.fetch(:parent)
+
+        if `#@target.type === 'Thunk' && typeof #@target.render === 'function'`
+          warn "Route '#{key}' points to a cached component. Cached " +
+               "components must not be persistent components, such as " +
+               "application roots or routing targets."
+        end
       end
 
       def route *args, &block
Warn when trying to cache persistent components