diff --git a/config/install/adsense.settings.yml b/config/install/adsense.settings.yml
index a31a4b5..99cdff6 100644
--- a/config/install/adsense.settings.yml
+++ b/config/install/adsense.settings.yml
@@ -1,16 +1,14 @@
-adsense_unblock_ads: 0
-adsense_test_mode: 0
-adsense_disable: 0
-adsense_placeholder: 1
+adsense_unblock_ads: false
+adsense_test_mode: false
+adsense_disable: false
+adsense_placeholder: true
 adsense_placeholder_text: 'Google AdSense'
 adsense_secret_language: ''
+adsense_managed_page_level_ads_enabled: false
 adsense_access_pages: { }
-
 adsense_basic_id: ''
 adsense_id_module: 'adsense_basic'
-
-adsense_managed_async: 1
-
+adsense_managed_async: true
 adsense_cse_logo: 'adsense_cse_branding_right'
 adsense_cse_color_box_background: 'FFFFFF'
 adsense_cse_encoding: 'UTF-8'
diff --git a/config/schema/adsense.schema.yml b/config/schema/adsense.schema.yml
new file mode 100644
index 0000000..f89d6fe
--- /dev/null
+++ b/config/schema/adsense.schema.yml
@@ -0,0 +1,71 @@
+adsense.settings:
+  type: config_object
+  label: 'AdSense Settings'
+  mapping:
+    adsense_unblock_ads:
+      type: boolean
+      label: 'Display anti ad-block request'
+    adsense_test_mode:
+      type: boolean
+      label: 'Enable test mode'
+    adsense_disable:
+      type: boolean
+      label: 'Disable Google AdSense ads'
+    adsense_placeholder:
+      type: boolean
+      label: 'Placeholder when ads are disabled'
+    adsense_placeholder_text:
+      type: string
+      label: 'Placeholder text'
+    adsense_secret_language:
+      type: string
+      label: 'Language to display ads'
+    adsense_managed_page_level_ads_enabled:
+      type: boolean
+      label: 'Enable page-level ads'
+    adsense_access_pages:
+      type: mapping
+      label: 'Access pages'
+      mapping:
+        id:
+          type: string
+          label: 'PlugIn ID'
+        pages:
+          type: string
+          label: 'Access pages'
+        negate:
+          type: string
+          label: 'Hide for the listed pages'
+    adsense_basic_id:
+      type: string
+      label: 'Site Google AdSense publisher ID'
+    adsense_id_module:
+      type: string
+      label: 'Publisher ID module'
+    adsense_managed_async:
+      type: boolean
+      label: 'Use asynchronous code'
+    adsense_cse_logo:
+      type: string
+      label: 'Logo type'
+    adsense_cse_color_box_background:
+      type: string
+      label: 'Background color'
+    adsense_cse_encoding:
+      type: string
+      label: 'Site encoding'
+    adsense_cse_textbox_length:
+      type: integer
+      label: 'Text box length'
+    adsense_cse_language:
+      type: string
+      label: 'Watermark language'
+    adsense_cse_country:
+      type: string
+      label: 'Country or territory for Google domain'
+    adsense_cse_frame_width:
+      type: integer
+      label: 'Width of results area'
+    adsense_cse_ad_location:
+      type: string
+      label: 'Ad location'
diff --git a/src/Form/AdsenseManagedSettings.php b/src/Form/AdsenseManagedSettings.php
index be67a61..a0598cf 100644
--- a/src/Form/AdsenseManagedSettings.php
+++ b/src/Form/AdsenseManagedSettings.php
@@ -118,6 +118,11 @@ class AdsenseManagedSettings extends ConfigFormBase {
     $config->set('adsense_access_pages', $this->condition->getConfiguration());
 
     foreach ($form_state->getValues() as $key => $value) {
+      // Skip saving of keys that are saved in "adsense_access_pages".
+      if (in_array($key, ['pages', 'negate'])) {
+        continue;
+      }
+
       $config->set($key, Html::escape($value));
     }
     $config->save();
