name: SEO Tools description: Adds common search engine optimisation tools such as meta tags, XML sitemap, robots.txt management and more. type: Drupal CMS recipes: - core/recipes/image_media_type install: - eca_base - eca_config - eca_content - eca_misc - eca_user - field_group - focal_point - layout_builder - menu_link_content - metatag - metatag_open_graph - metatag_twitter_cards - node - robotstxt - seo_checklist - simple_sitemap - sitemap - token_or - yoast_seo config: # Treat all field storages strictly, since they influence the database layout. strict: - field.storage.node.field_seo_analysis - field.storage.node.field_seo_description - field.storage.node.field_seo_image - field.storage.node.field_seo_title import: metatag: # Exclude Global, Front and Node as we create those in the config folder. - metatag.metatag_defaults.403.yml - metatag.metatag_defaults.404.yml - metatag.metatag_defaults.taxonomy_term.yml - metatag.metatag_defaults.user.yml simple_sitemap: '*' actions: # Add SEO fields to all content types that are installed. field.storage.node.field_seo_analysis: addToAllBundles: label: 'SEO analysis' description: 'Pick the main keyword this page is about.' field.storage.node.field_seo_description: addToAllBundles: label: 'SEO description' description: 'Write a description for search engines and social media sites.' field.storage.node.field_seo_image: addToAllBundles: label: 'SEO image' description: 'Upload an image to be used when the page is shared on social media sites.' # Ensure all instances of `field_seo_image` reference image media. field.field.node.*.field_seo_image: setSettings: handler: 'default:media' handler_settings: target_bundles: image: image field.storage.node.field_seo_title: addToAllBundles: label: 'SEO title' description: 'Use this field to overwrite the default HTML page title for SEO.' # Configure the fields on the edit forms. core.entity_form_display.node.*.default: # Configure field group. setThirdPartySettings: - module: field_group key: group_seo value: children: - field_seo_title - field_seo_description - field_seo_image - field_seo_analysis label: 'Search Engine Optimization (SEO) Information' region: content parent_name: '' weight: 50 format_type: details format_settings: classes: '' show_empty_fields: false id: group_seo label_as_html: false open: false description: '' required_fields: false setComponents: - name: field_seo_analysis options: type: yoast_seo_widget weight: 18 region: content settings: render_theme: NULL render_view_mode: default edit_title: 0 edit_description: 0 - name: field_seo_description options: type: string_textarea weight: 16 region: content settings: rows: 5 placeholder: '' - name: field_seo_image options: type: media_library_widget weight: 17 region: content settings: media_types: { } - name: field_seo_title options: type: string_textfield weight: 15 region: content settings: size: 60 placeholder: '' robotstxt.settings: # We add Drupal core's robots.txt and XML Sitemap. simpleConfigUpdate: content: | # # robots.txt # # This file is to prevent the crawling and indexing of certain parts # of your site by web crawlers and spiders run by sites like Yahoo! # and Google. By telling these "robots" where not to go on your site, # you save bandwidth and server resources. # # This file will be ignored unless it is at the root of your host: # Used: http://example.com/robots.txt # Ignored: http://example.com/site/robots.txt # # For more information about the robots.txt standard, see: # http://www.robotstxt.org/robots User-agent: * # CSS, JS, Images Allow: /core/*.css$ Allow: /core/*.css? Allow: /core/*.js$ Allow: /core/*.js? Allow: /core/*.gif Allow: /core/*.jpg Allow: /core/*.jpeg Allow: /core/*.png Allow: /core/*.svg Allow: /profiles/*.css$ Allow: /profiles/*.css? Allow: /profiles/*.js$ Allow: /profiles/*.js? Allow: /profiles/*.gif Allow: /profiles/*.jpg Allow: /profiles/*.jpeg Allow: /profiles/*.png Allow: /profiles/*.svg # Directories Disallow: /core/ Disallow: /profiles/ # Files Disallow: /README.md Disallow: /composer/Metapackage/README.txt Disallow: /composer/Plugin/ProjectMessage/README.md Disallow: /composer/Plugin/Scaffold/README.md Disallow: /composer/Plugin/VendorHardening/README.txt Disallow: /composer/Template/README.txt Disallow: /modules/README.txt Disallow: /sites/README.txt Disallow: /themes/README.txt # Paths (clean URLs) Disallow: /admin/ Disallow: /comment/reply/ Disallow: /filter/tips Disallow: /node/add/ Disallow: /search/ Disallow: /user/register Disallow: /user/password Disallow: /user/login Disallow: /user/logout Disallow: /media/oembed Disallow: /*/media/oembed # Paths (no clean URLs) Disallow: /index.php/admin/ Disallow: /index.php/comment/reply/ Disallow: /index.php/filter/tips Disallow: /index.php/node/add/ Disallow: /index.php/search/ Disallow: /index.php/user/password Disallow: /index.php/user/register Disallow: /index.php/user/login Disallow: /index.php/user/logout Disallow: /index.php/media/oembed Disallow: /index.php/*/media/oembed # XML sitemap Sitemap: /sitemap.xml sitemap.settings: simpleConfigUpdate: plugins.frontpage: base_plugin: frontpage enabled: true weight: 0 settings: title: 'Front page' rss: null id: frontpage provider: sitemap plugins.menu:main: base_plugin: menu enabled: true weight: 0 settings: title: '' show_disabled: false id: 'menu:main' provider: sitemap system.performance: simpleConfigUpdate: # Ensure caching is on and set to 15 minutes for Lighthouse. cache.page.max_age: 900 # Ensure CSS and JS are preprocessed. css.preprocess: true js.preprocess: true user.role.anonymous: grantPermission: 'access sitemap' user.role.authenticated: grantPermission: 'access sitemap'