diff --git a/django/contrib/auth/__init__.py b/django/contrib/auth/__init__.py
index d5d4430..0fe0c91 100644
--- a/django/contrib/auth/__init__.py
+++ b/django/contrib/auth/__init__.py
@@ -97,7 +97,10 @@ def get_user_model():
     from django.conf import settings
     from django.db.models import get_model
 
-    app_label, model_name = settings.AUTH_USER_MODEL.split('.')
+    try:
+        app_label, model_name = settings.AUTH_USER_MODEL.split('.')
+    except ValueError:
+        raise ImproperlyConfigured("Invalid AUTH_USER_MODEL setting, value must be of the form 'app_label.model_name'")
     return get_model(app_label, model_name)
 
 
diff --git a/django/core/management/validation.py b/django/core/management/validation.py
index f613009..190fcb8 100644
--- a/django/core/management/validation.py
+++ b/django/core/management/validation.py
@@ -23,7 +23,7 @@ def get_validation_errors(outfile, app=None):
     """
     from django.conf import settings
     from django.db import models, connection
-    from django.db.models.loading import get_app_errors
+    from django.db.models.loading import get_app_errors, get_model
     from django.db.models.fields.related import RelatedObject
     from django.db.models.deletion import SET_NULL, SET_DEFAULT
 
@@ -283,6 +283,17 @@ def get_validation_errors(outfile, app=None):
                     if r.get_accessor_name() == rel_query_name:
                         e.add(opts, "Reverse query name for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
 
+        # Check swappable attribute.
+        if opts.swappable and getattr(settings, opts.swappable, None):
+            swappable_setting = getattr(settings, opts.swappable)
+            try:
+                app_label, model_name = swappable_setting.split('.')
+            except ValueError:
+                e.add(opts, "Invalid settings.%s, '%s' not of the form 'app_label.app_name' for swapped out model '%s'." % (opts.swappable, swappable_setting, cls._meta.object_name))
+                continue
+            if get_model(app_label, model_name) not in models.get_models():
+                e.add(opts, "'%s' has been swapped out in settings.%s to a model '%s.%s' that does not exist." % (cls._meta.object_name, opts.swappable, app_label, model_name))
+
         # Check ordering attribute.
         if opts.ordering:
             for field_name in opts.ordering:
