diff --git a/src/Feeds/Fetcher/Form/HttpFetcherFeedForm.php b/src/Feeds/Fetcher/Form/HttpFetcherFeedForm.php
index 1b468db..fde3ffd 100644
--- a/src/Feeds/Fetcher/Form/HttpFetcherFeedForm.php
+++ b/src/Feeds/Fetcher/Form/HttpFetcherFeedForm.php
@@ -48,6 +48,7 @@ class HttpFetcherFeedForm extends ExternalPluginFormBase implements ContainerInj
       '#title' => $this->t('Feed URL'),
       '#type' => 'url',
       '#default_value' => $feed->getSource(),
+      '#required' => TRUE,
     ];
 
     return $form;
@@ -57,7 +58,15 @@ class HttpFetcherFeedForm extends ExternalPluginFormBase implements ContainerInj
    * {@inheritdoc}
    */
   public function validateConfigurationForm(array &$form, FormStateInterface $form_state, FeedInterface $feed = NULL) {
-    $url = Feed::translateSchemes($form_state->getValue('source'));
+    try {
+      $url = Feed::translateSchemes($form_state->getValue('source'));
+    }
+    catch (\InvalidArgumentException $e) {
+      $form_state->setError($form['source'], $this->t("The feed's scheme doesn't match a scheme recognized by this module. Accepted schemes are http, feed, webcal, https, feeds, and webcals."));
+      // If the source doesn't have a valid scheme the rest of the validation
+      // isn't helpful. Break out early.
+      return;
+    }
     $form_state->setValue('source', $url);
 
     if (!$this->plugin->getConfiguration('auto_detect_feeds')) {
