diff --git a/src/EventSubscriber/CacheControlEventSubscriber.php b/src/EventSubscriber/CacheControlEventSubscriber.php
index 89a627c..bd3ebb4 100644
--- a/src/EventSubscriber/CacheControlEventSubscriber.php
+++ b/src/EventSubscriber/CacheControlEventSubscriber.php
@@ -52,18 +52,22 @@ class CacheControlEventSubscriber implements EventSubscriberInterface {
     }
 
     $ttl = $response->getMaxAge();
+    $force_s_maxage = FALSE;
 
     switch ($response->getStatusCode()) {
       case 404:
         $ttl = $config->get('cache.http.404_max_age');
+        $force_s_maxage = TRUE;
         break;
 
       case 302:
         $ttl = $config->get('cache.http.302_max_age');
+        $force_s_maxage = TRUE;
         break;
 
       case 301:
         $ttl = $config->get('cache.http.301_max_age');
+        $force_s_maxage = TRUE;
         break;
     }
 
@@ -71,7 +75,7 @@ class CacheControlEventSubscriber implements EventSubscriberInterface {
       $response->setClientTtl($ttl);
       $response->setSharedMaxAge($ttl);
     }
-    elseif ($ttl = $config->get('cache.http.s_maxage')) {
+    elseif ($force_s_maxage || $ttl = $config->get('cache.http.s_maxage')) {
       $response->setSharedMaxAge($ttl);
     }
 
diff --git a/tests/src/HttpCacheControlTest.php b/tests/src/HttpCacheControlTest.php
index 32c6d4e..cb7d6a5 100644
--- a/tests/src/HttpCacheControlTest.php
+++ b/tests/src/HttpCacheControlTest.php
@@ -86,6 +86,13 @@ class HttpCacheControlTest extends BrowserTestBase {
     $this->drupalGet('system-test/set-header', ['query' => ['name' => 'Foo', 'value' => 'surrogate-nostore']]);
     $this->assertStringContainsString('max-age=405', $this->getSession()->getResponseHeader('Surrogate-Control'), 'Surrogate-Control header contains maxage');
     $this->assertStringContainsString('no-store', $this->getSession()->getResponseHeader('Surrogate-Control'), 'Surrogate-Control header does contain no-store');
+
+    $config->set('cache.http.404_max_age', 300);
+    $config->save();
+
+    $this->drupalGet('system-test/not-found-either');
+    $this->assertStringContainsString('max-age=300', $this->getSession()->getResponseHeader('Cache-Control'), 'Cache-Control header contain maxage for 404');
+    $this->assertStringContainsString('s-maxage=300', $this->getSession()->getResponseHeader('Cache-Control'), 'Cache-Control header does not contain s-maxage');
   }
 
 }
