clemens-tolboom commented on issue dmontagu/fastapi-utils#256

On github - Thu, 2023/03/02 - 10:02am
clemens-tolboom commented on dmontagu/fastapi-utils#256 · March 2, 2023 09:02 clemens-tolboom commented Mar 2, 2023

'decorators are wrappers around' and in this case they come from two different tools in the order bottom to top. Maybe fastapi-util could have 'aut…

Dropsolid Experience Cloud: How to add metatags to your headless Drupal project

Planet Drupal - Thu, 2023/03/02 - 9:59am
In this blogpost, I'll show you how to get your meta tags working in your headless Drupal (Next.js) application.

Evolving Web: Hands-On With Drupal 10: Discover the Best Modules Through Project Browser

Planet Drupal - Thu, 2023/03/02 - 9:00am

Drupal is famed for its flexibility and scalability. Any user can extend their website with an impressive array of contributed modules (nearly 50,000 at the time of writing!) thanks to Drupal’s modular structure and its thriving community of contributors.

But there’s a flip side to this abundance: selecting the right module can be a daunting task. It hasn’t helped that, until now, searching the full repository meant grappling with a long list of inconsistent descriptions on It’s a time-consuming process that intimidates new users and frustrates the seasoned ones (yes, even us!). And while search engines and recommendations helped, they often failed to give enough exposure to the newer and more niche modules. 

The opportunity was clear: users needed a fast, painless way to pick from the vast ‘candy store’ of contributed modules. 

We’re excited to say that the solution has finally arrived! Drupal users, meet Project Browser.

Project Browser: Your One-Stop Shop for Drupal Modules

Project Browser is a simple but powerful tool that will let you easily search, filter, review, and download the best modules for your needs. It’s currently in Beta, but the module is under active development and compatible with Drupal 10

Project Browser promises to be an essential add-on for site builders, web managers, developers, and anyone else who wants to leverage the full potential of Drupal.

Below, we explore the features and benefits of Project Browser that we’re most excited about.

Search Modules Without Leaving Your Site

With Project Browser, you can search the entire repository of contributed modules directly from your Drupal admin dashboard. Once you’ve installed it, simply go to the Browse tab that’ll appear on the Extend page. 

Project Browser is connected with the API using a decoupled approach to ensure content is updated in real time. 

Project Browser streamlines the process of selecting and downloading modules. Credit: Drupal.

Compare Modules at a Glance

Project Browser has a clean, user-friendly design that makes it easy to compare modules side by side. It displays your search results as tiles and lets you view them in list or grid mode. The tiles also feature category tags and a security policy icon. 

The modern, intuitive design makes it easier to review and compare a selection of modules. Credit: Drupal.

Only See Modules for Your Version of Drupal

The search results you see in Project Browser are automatically filtered by the version of Drupal you’re on. That way, you won’t waste any time reviewing modules that aren’t compatible with your website. 

Use Filters to Find the Perfect Fit

Project Browser applies default filters to ensure you only see maintained projects that are covered by a security policy – although you can remove these filters if you want. You can also filter by a wide range of categories such as accessibility, e-commerce, events, and location to name a few.

Narrow down your search results by applying filters. Credit: Drupal.

See Projects by Popularity

By default, Project Browser sorts your search results by active installs. This means you’ll see the more popular modules first, helping you find high-quality solutions faster. 

Get Clear Steps for Installation

Once you’ve found a suitable module, you can hit ‘View Commands’ to get instructions commands to download it via Composer and install it with Drush. 

Project Browser simplifies the installation process. Credit: Drupal.

Expect Even Easier Installs in the Future

Users will soon be able to download modules automatically with Composer running behind the scenes. An experimental version of Project Browser has been set up to develop this functionality. You’ll be able to hit “Download and Enable” on your selected module and let Project Browser do the rest.

Want to Master the Fundamentals of Drupal?

Join our upcoming Drupal for Content Editors training session. Our expert instructors provide hands-on exercises, live demos, and actionable advice to help you excel in your role. You’ll come away from this session with a solid understanding of how to implement a strong content strategy and use Drupal’s content publishing system effectively.

//--> //-->

+ more awesome articles by Evolving Web
Categories: Drupal 10 upgrade: File to media

Planet Drupal - Thu, 2023/03/02 - 8:02am

We're continuing our series on upgrading this very website to Drupal 10...but our first proper bit of work to upgrade this site is essentially nothing to do with Drupal 10!

We built this site in the early days of Drupal 8 and Drupal core didn't really handle 'media' any differently to Drupal 7, but we wanted to try out some new modules that included having a library and drag&drop upload. However, these modules are an additional thing that we need to upgrade and have been pain in that sometimes the buttons don't appear, or they're buggy in other ways. Anyway we're going to replace our previous way of doing media handling, with the way that Drupal 8.5 introduced: the media module. To be perfectly honest we could (and maybe should) have done this piece or work a long time ago, but we simply never got around to it. Anyway, here's an idea of what we had before:

On lots of our entity bundles, we had file and image fields, these were named something like field_background_image for example. This would hold the image that was eventually styled into the title header banner at the top of the page. We wanted a nicer experience for uploading and selecting files to use than the core offering at the time. 

We had settled on using the File Entity Browser module which brings with it a lot of dependencies, but then does give a relatively nice experience that looks a bit like this:

Our File entity browser based upload widget

You get a drag & drop upload, and you get to pick files from a grid of files if that's what you want.

This is all well and good, but Drupal core basically does all this now, via the media module, so how do we get to this:

The Drupal core media upload widget

To get there, we're going to have to:

  • Enable the core media and media library modules
  • Set up our media types that we want to use
  • Create duplicates of our current file/image fields, but as media fields
  • Switch our templating/PHP code over to use the new media fields
  • Write some kind of data migration to create new media entities for existing files and update the content to reference the new media entities
  • Delete the old fields.

I appreciate that there are modules out there that can help with some of this, but none of them seemed to work quite right for me when I'd tried in the past, and they seemed to get hung up on things like deduplication of files, which I wasn't particularly bothered by.

Setting up core media

This is, by far, the easiest bit: I enable the media module, and then grab the media related config from the core demo umami profile, since that has and image and document media entity all set up and ready to use. I grabbed the following config files:

  • media.type.image.yml
  • media.type.document.yml

And import them into this site, just as a super quick way to get going with a simple set of config that would enable core media handling.

Duplicating fields

Now for the tedious part: duplicating all those lovely file/image fields with media field equivalents. To get a nice list of the entity bundles that needed this work doing, I went to uninstall the File entity browser module, and Drupal gives me a nice list of the config that would need to be updated. This is essentially a list of bundles where we'd set up our file upload widget that I needed to swap out.

So, I go one by one looking at each bundle, and where there was a field named like: field_background_image for example, I'll create a new entity reference field called: field_background_media and set it to reference media entities. Then I set it to use the media widget, and matched its position and settings on the entity form and entity display modes. I did do this manually, but I imagine this would be fairly simple to automate, but I only had a handful of fields, and I went slowly and carefully with the next bit anyway, making sure to test each of my new fields.

In our theme layer, we do a decent amount with some of the files referenced by these fields, for example the background images for the page headers, get processed by some custom code that generates some specific inline CSS. So I searched the codebase for usages of these field names, and switch them over to the new fields. Being careful that now there was an extra level of entity in the structure of the data, since before I'd have had:

Host entity -> image field -> File entity -> Actual URL to image

But now the new fields will have:

Host entity -> media field -> media entity -> image field -> File entity -> Actual URL to image

This is actually pretty easy for this site, because we'd nicely separated out getting the image from the templates themselves, so this step was fairly straightforward in the end, it was fairly repetitive though. I duplicated a field, found all usages of it, changed them and then tested the code to make sure it was all working properly.

Data migration

Now we have the duplicated fields, and we know they all work we need to get the data into them. We're going to load up any entity that references a file in one of the fields we've duplicated, loop over all the fields, and where there's a file we'll create a new media entity that references this file and insert this into the field on the outer entity. We'll save each entity as we go.

We don't have that much content on this site, so we can run these in an update hook, and the site will be down for a minute or so running the update hook, but that's okay for our use case. Other sites might require a different approach.

Without further ado, here's our code:

/** * Migrate image fields to media fields. * * @param string $entity_type_id * The entity type id. * @param array $image_field_map * An array of mappings, each sub array should have the following keys: * - source: The source image field name. * - destination: The destination media field name. * - media_bundle: The media bundle to create. * @param string|NULL $bundle_id * The bundle id. * * @return void */ function computerminds_core_migrate_to_media_helper(string $entity_type_id, array $image_field_map, string $bundle_id = NULL): void { $entity_storage = \Drupal::entityTypeManager()->getStorage($entity_type_id); // Construct a query to find all entities with the image fields. $entity_query = $entity_storage->getQuery(); if (isset($bundle_id)) { $entity_query->condition('type', $bundle_id); } // We don't want to check access. $entity_query->accessCheck(FALSE); // Add a condition for each image field. $field_conditions_group = $entity_query->orConditionGroup(); foreach ($image_field_map as $field_map) { $field_conditions_group->exists($field_map['source']); } $entity_query->condition($field_conditions_group); $entity_ids = $entity_query->execute(); // Process in chunks of 10. foreach (array_chunk($entity_ids, 10) as $entity_ids_chunk) { foreach ($entity_storage->loadMultiple($entity_ids_chunk) as $entity) { // Process each image field. foreach ($image_field_map as $field_map) { $image_ids = $entity->get($field_map['source'])->getValue(); $entity->set($field_map['destination'], NULL); foreach ($image_ids as $image_id) { $file = \Drupal::entityTypeManager() ->getStorage('file') ->load($image_id['target_id']); if (!$file) { $message = 'Media cannot be created. The %entity_type_id with ID: %entity_id of bundle: %bundle refers to the image file with ID: %fid. But there is no information about the file with this ID in the database.'; \Drupal::logger('image_field_to_media')->error($message, [ '%fid' => $image_id['target_id'], '%entity_type_id' => $entity_type_id, '%bundle' => $bundle_id, '%entity_id' => $entity->id(), ]); continue; } $media_data = [ 'bundle' => $field_map['media_bundle'], 'uid' => $file->getOwnerId(), 'created' => $file->getCreatedTime(), // @TODO: Make this work for languages. ]; // Asign the file to the correct field. switch ($field_map['media_bundle']) { case 'image': $media_data['field_media_image'] = $image_id; break; case 'document': $media_data['field_media_document'] = $image_id; break; } $media = \Drupal\media\Entity\Media::create($media_data); $media->save(); $entity->get($field_map['destination'])->appendItem($media->id()); } } $entity->save(); } } }

Note that I've hardcoded this with our specific fields on our media entities.

We can then call this helper like this:

function computerminds_core_update_9114() { $entity_type_id = 'node'; $bundle_id = 'article'; $image_field_map[] = [ 'source' => 'field_banner_image', 'destination' => 'field_banner_media', 'media_bundle' => 'image', ]; $image_field_map[] = [ 'source' => 'field_mobile_banner_image', 'destination' => 'field_mobile_banner_media', 'media_bundle' => 'image', ]; $image_field_map[] = [ 'source' => 'field_files', 'destination' => 'field_attachments', 'media_bundle' => 'document', ]; computerminds_core_migrate_to_media_helper($entity_type_id, $image_field_map, $bundle_id); }

I then went through and wrote an update hook for each entity type and bundle combination that I needed, following the same boilerplate pattern of an array of fields to map.

Once the update hooks have run, then I was able to check each of the bits of content and see that the media entities had been created correctly, and added correctly added to the entities.

Delete the old fields

The fun, last step! Deleting the old fields: which will remove the field data from the content entities, but not the actual file entities themselves, so they'll still be around to be referenced by the media entities.

This then also allows me to uninstall the File entity browser module, and then the Entity browser, Entity embed module and Dropzonejs module, big win because we now have many fewer modules to upgrade.


Our deployments do this:

  1. Run database updates
  2. Import config
  3. Rebuild caches

To deploy this work, I committed each of the above steps, along with their exported config, to git. Then I was able to deploy each commit in turn, so that the site briefly had lots of empty media fields, and wasn't showing any images, but then minutes later had all the content migrated and then finally all the old fields and modules were gone. Oh, I also took a full backup before I started these deployments!

That's it for the first big step on the road to Drupal 10 for this site, but I have to reflect and say that having done similar types of data manipulation in Drupal 7, Drupal 9 makes this stuff much, much simpler!


ImageX: Compelling Content Marketing for Higher Education Websites

Planet Drupal - Wed, 2023/03/01 - 5:53pm
Compelling Content Marketing for Higher Education Websites amanda Wed, 03/01/2023 - 16:53

When a prospective student is making the choice of where to study, their first point of call is more often than not, the institution’s website. It’s where they learn about the exciting study programs, the bustling campus life, and the unique university vibe. Engaging text in combination with catchy visuals helps them find the answer to the main question: “Is this the right choice for me?”. That’s why the role of your website and content marketing is unmatched when it comes to boosting student enrollment and helping your higher ed institution stand out from its numerous competitors.


How can you make your university or college site genuinely attractive and informative for students, as well as for staff, faculty, parents, donors, and alumni? When it comes to best practices for higher education websites, content marketing is one of the most interesting topics to discuss. We’ve collated some of the ImageX team’s recent articles filled with content tips for higher education below.


Create vibrant, student-focused content


Although factors like university size, location, available majors, and costs are important, prospective students primarily base their decisions on emotion. Your homepage might be great at creating that “big-bang” first impression, which makes students’ hearts sing and lets them know they belong to this place. However, by navigating deeper into a higher education institution’s website, students are often faced with long and dull walls of text.


No worries — it’s totally possible to breathe life into your university site and turn it into a vibrant content hub! To begin with, you will need to assess your current pieces and decide what to keep, what to rework, and what to cut. These decisions need to be data-driven, so you might want to rely on marketing analytics platforms, research, and testing. Next, establish the content creation guidelines and move forward.


To fill your university website with vibrant voices, you could gather informal news from your students’ social media, create a submission form for club leaders to share announcements, and transform the lofty prose from researchers using everyday, easy-to-read language. Another great idea is to create interactive features so prospective students can get a feel of your campus

Breathe life into your university site and assess your current content to decide what to keep, what to rework, and what to cut.  Embrace digital storytelling


We all love good stories. This love starts in our childhood when stories help us comprehend the world, and it accompanies us through our adult lives as we become prospective customers of various organizations. That being said, it shouldn’t come as a surprise that there is an ongoing content marketing trend to craft unique narratives with the organization’s audience as the main heroes. These compelling stories engage customers and inspire them to make conversions.


Your university could tell its impactful stories, too, and we are happy to guide you through the best storytelling practices. Since the rule of thumb is to center your narratives around your audience and their needs, the heroes of your stories could be your prospective students, current students, alumni, and so on. You could also dig deeper into exploring your audience and create more detailed “user personas” — for example, “a student who wants to study abroad in North America.”


The heroes of your stories could be your prospective students, current students, alumni, and so on.

Storytelling 101: How to Create Website Content that Resonates With Your Audience.”



Be open to users with special needs


When crafting great content that reaches your university website’s audience, you need to give every user a chance to perceive it, even if they rely on assistive devices. Considering the diversity of audiences and the existing accessibility laws, creating an accessible website is a top priority in higher education, so you might have already implemented some accessibility guidelines with the help of a good design and development team.


However, accessibility is not created solely by website design and development experts. Website content also needs to be produced with accessibility in mind. A content marketing team’s contribution to website accessibility can be huge.


What does accessible content creation mean? We recommend starting with empathy and always thinking about how people with different abilities will experience your higher education site’s content. Next, take care of straightforward language, clear structure, ALT tags, descriptive links, transcripts and captions for audio and videos, HTML pages to replace inaccessible PDFs, etc. Finally, check your pages with third-party accessibility tools. See more useful details in our Top 10 Accessibility Tips for Content Editors.

  Divide the “Herculean task” into chunks


In the previous chapter, we discussed the importance of creating accessible content and some of the best practices it involves. Ok, so you have a huge higher education website with innumerable pages for faculties, departments, programs, admission requirements, news, events, and so much more. Moreover, multiple people from different teams are involved in content creation. In this situation, making all the website’s content accessible may look like a Herculean task.


Instead of trying to make up a long list of problems that need to be addressed, we suggest taking an Agile approach. Originally created for developers, the Agile methodology has its values and principles fully applicable to any industry.


Based on this approach, you can transform the Herculean tasks into doable chunks on which you will be able to see meaningful progress. Set your priorities, or choose the most impactful pages to be updated first, then do the work in short cycles also known as sprints. However, in the future, you can prevent content accessibility issues from occurring so you don’t even have to deal with a Herculean task. Organize training for your staff and commit to continuous improvement — one of the Agile principles. 


“Humanize” your higher education content


Today, a learning environment needs to be inclusive and welcoming, as well as foster a sense of belonging. Creating inclusive content on your higher education website could greatly help you achieve this result. You need to consider the diversity of your university’s audience and craft messages that appeal to as many of its segments as possible, be it prospective students, parents, or other target groups. 


One of the ways to be on the same wavelength as them is to use their language. Another useful idea is to create stories where different groups of people are equally represented, which could help everyone recognize themselves. Consider also using diverse content formats to tailor to different preferences and abilities when it comes to consuming the information.


Whatever the techniques are, it all comes down to having a people-first approach to content marketing. Check out our article called “Humanize Your Higher Ed Website with Inclusive Content” for more information and tips about it. And never miss an awesome example of our customers — Ashland University — that created an inclusive digital space and emphasized their “We See You” philosophy.


Use the editorial features of a good CMS


Higher education websites have countless content pages that need to be updated regularly. Managing them all on a day-to-day basis is an arduous task for any marketing team. However, your website’s CMS can be a game changer in this area if it plays on your side. You just need to choose a platform that makes your editing workflows as robust, user-friendly, and intuitive as possible. Drupal could be your best choice here. 


Content in Drupal has a well-defined structure where the information about different content types, such as articles or events, is stored in standard sets of fields. The user-friendly admin dashboard makes it easy to manage pieces of different types across the entire website.


Drupal is endlessly flexible in enabling you to create various content layouts, as well as using ready components. One of the great examples of ready-to-go blocks is the starter kit by our team. It includes the most common block types such as an accordion menu, a carousel, a ping-pong block, and much more. 


Try alternative content sources 


All the content marketing tips and recommendations could create an impression that you and your marketing team always need to be perfect in providing large amounts of fresh, engaging, accurate, and accessible content. What about having enough time for producing it? One of your university faculties might invent the time machine someday, but before they do it, you need to find other solutions.


One of the secrets is you don’t have to create absolutely everything from scratch. There must be some podcast episodes, YouTube or TED videos, SlideShare or eLearning presentations, or other media on the web that could be useful to your university’s students. In addition, there are news, articles, or press releases from trusted sources that could keep your higher education site’s audience up-to-date on important events, discoveries, trends, and more. Finally, as we touched upon in the first chapter about making your site more vibrant, you could try exploring informal sources like students’ social media.


Gathering relevant third-party content and sharing it on your site is known as content curation. While implementing it, it’s best to not just share but provide a brief introduction to the shared pieces. Our article on smart content curation shares more tips and tricks for it describes its benefits, as well as walks you through the specific steps to get started. 


Final thoughts


There is always something new to learn about impactful content marketing for higher education.  So we are more than happy to be constantly discovering and sharing useful tips about it. Stay tuned for more article collections, and just reach out if you need any assistance or want to talk through your requirements. 

/sites/default/files/styles/original/public/2023-03/pexels-karolina-grabowska-8106661.jpg.webp?itok=qvV3HPwN Feature as an event Off Service Category Strategy Content Strategy Storytelling IsGated 0 Verticals Higher Education IsDownloadable 0
Categories: 3 myths about open source CMS platforms

Planet Drupal - Wed, 2023/03/01 - 9:00am
3 myths about open source CMS platforms pierina.wetto Wed, 03/01/2023 - 03:00

Open source alternatives to proprietary platforms offer benefits for developers and users alike.

There are two choices when it comes to building a website. You can choose an open source platform like Drupal or WordPress, or a proprietary platform overseen by a company…


Matt Glaman: Check out the "Drupal at your fingertips" developer reference guide

Planet Drupal - Tue, 2023/02/28 - 3:18pm

Selwyn Polit has created a fantastic Drupal 9 and 10 developer reference guide called Drupal at your fingertips. The book is a reference guide that explains the various APIs within Drupal and examples of code for using them. The book's contents are available online, and all of the content is licensed under Creative Commons Attribution 4.0, making it available to share and modify with attribution. You can find the Drupal at your fingertips book online at: and its source at


Lemberg Solutions: Drupal Commerce + SAP Integration: Solutions and Benefits

Planet Drupal - Tue, 2023/02/28 - 1:00pm
If you’ve been looking for a viable solution to extend the functionality of your Drupal Commerce platform, we have one. In this article, our Drupal Team Lead, Mykhailo Hurei, provides a comprehensive overview of SAP integration with Drupal Commerce. Keep reading to learn how we integrated the Drupal Commerce platform with SAP for one of our clients and find out what custom features we added. 

Specbee: Migrate to Drupal 9 (or 10) Without Losing Your Hard-Earned SEO Ranking

Planet Drupal - Tue, 2023/02/28 - 7:03am
Migrate to Drupal 9 (or 10) Without Losing Your Hard-Earned SEO Ranking Shefali Shetty 28 Feb, 2023 Subscribe to our Newsletter Now Subscribe Leave this field blank

Website migrations are never an easy decision and we get it. The fear of their SEO rankings being negatively affected often holds site owners back from migrating their CMS or upgrading from an older version. After all, it has been a long and hard process to get your website to the top of Google's search result pages, and you don't want all that effort to go to waste. 

However, this common concern can be addressed and mitigated before and during the migration process. With meticulous planning and a systematic migration approach, a website migration will not affect your SEO. Instead, with a CMS like Drupal that offers SEO and performance optimization techniques, your SEO ranking should see an upward trend.

In this article, we’ll discuss why a website migration to Drupal 9 does not have to mean sacrificing your SEO ranking. We'll go through some of the best practices and tips as well as what you need to do if you see a drop in ranking after the migration.

Why Migrate to Drupal 9 (or 10)

Most of our clients migrate/upgrade their CMS to Drupal 9 for one big reason: to fuel their business growth! Drupal 9 offers the high-performance tools and features needed to take your business to the next level.

Let’s get started with understanding why migrating your CMS to Drupal is important, especially in terms of SEO:

  • Upgrading your CMS to the latest version of Drupal will bring more features, stability, and security to your website while also increasing the performance of your site by​​ using the latest technologies. 
  • Drupal allows for easy management of important on-page optimization elements like meta tags, URLs, meta descriptions, titles and others that are vital to enhance your ranking.
  • Drupal is SEO-ready straight out of the box! A variety of built-in and contributed SEO boosting modules that can be easily integrated with a Drupal website enhances its indexability. 
  • Drupal’s clean and well-structured code makes it easier for search engines to understand your website’s content.
  • The highly customizable nature of Drupal enables you to tailor it to meet your SEO strategy's specific requirements.
Should you be concerned about a migration affecting your SEO?

A migration involves moving and mapping all your website's content, data, and functionality from an old version to a newer one. It's like charting a new course to a brighter future.  And they are never going to be identical. A CMS migration when done right cannot be a cause for your SEO ranking to get affected. 

Ideally, a website redesign or CMS migration is risk-free when no URL or structural changes are expected. But let’s give you a few reasons when you should be concerned:

  • When you’re changing domain names and your new URL structure is completely different than the old one. This can cause search engines to see these pages as new pages and will lose the existing SEO juice.
  • When internal links are lost during migration due to various reasons like a change in the URL structure, content reorganization or any manual migration errors.
  • When the content is not migrated properly and leads to duplicate content.
  • When a migration causes broken links which can lead to bad user experiences and consequently a dip in SEO ranking.
  • When there are problems with the website’s crawlability and indexability because of technical errors during a migration.
SEO Audit - First Step to a Successful Migration

We cannot emphasize enough how important an SEO audit is before a migration. 

Just like you would thoroughly examine and fix your car before a big road trip to ensure a smooth and safe journey, an SEO audit can help you identify and avoid potential technical issues or SEO problems before a migration. It also allows you to plan for redirects, establish a baseline for measuring the impact on SEO performance and ensure current best practices.

What happens during an SEO Audit?

Your ideal Drupal agency should provide you with a comprehensive SEO audit checklist before planning the CMS migration. Read this article to find out how to evaluate a Drupal partner for your next project.

Here are some of the most significant elements that are analyzed during an SEO audit:

  • Check if robot.txt exists and is configured properly to make the website crawlable
  • Verify if sitemap.xml exists and is optimized
  • Clean URLs are enabled for SEO Friendly URLs
  • Appropriate meta information and tags are present for web pages
  • Check if structure data is enabled for the site.
  • Verify if a canonical URL set for all the pages
  • The titles and descriptions are optimized
  • Check for duplicate content
  • Check for broken links
  • Find out if analytics tools are present on the application for tracking
The Do's and Don'ts Do: Create a full backup of your website

Before you begin the migration process, make sure to create a full backup of your website to ensure that you have a copy of all your website's files and data.

Do: Benchmark current keyword rankings

Benchmarking old rankings is an important step when migrating a website to a new domain or URL structure. It helps you understand how your website is currently performing in search engines and identify any potential issues that may affect your SEO efforts after the migration.

Do: Benchmark organic traffic levels

It helps you monitor any changes in organic traffic after the migration and allows you to identify any issues that may be affecting your SEO efforts.

Do: Keep the same URL structure

Try to keep the same URL structure of your website, if possible. This will help to maintain the authority of your website and avoid any broken links

Do: On-page optimization

On-page optimization is crucial when migrating a website to ensure that your site is optimized for search engines and user experience. Here are some steps to take for on-page optimization during a website migration:

  • Update content
  • Optimize meta elements
  • Use header tags
  • Optimize images
  • Improve page speed
  • Implement structured data
Do: Use Drupal SEO Modules

Drupal is a popular content management system (CMS) that provides several SEO modules that can help with website migration. Here are some SEO modules you may want to consider when migrating a Drupal website:

  • Pathauto
  • Redirect
  • Metatag
  • XML sitemap
  • Google Analytics
Do: Test Contact form, Thank you Page, Conversion code

It is important to test all contact forms, thank you pages, and conversion codes while migrating a website. Here are some tips to help you ensure that these elements are working correctly after the migration:

  • Test all contact forms - Make sure to test all contact forms on your website to ensure that they are working correctly. This includes testing the form fields, validation messages, and submission process.
  • Verify thank you pages - Check that all thank you pages are working properly and have the correct URLs. Test them to ensure that they load correctly after form submissions or other actions.
  • Check conversion codes - If you have any conversion codes installed on your website, such as Google Analytics or Facebook pixel, make sure to check that they are working properly. Verify that the codes are firing correctly on the appropriate pages and that they are tracking conversions accurately.
  • Update any changes - If you make any changes to your contact forms, thank you pages, or conversion codes during the migration process, make sure to update them on the new website as well. This will help ensure that everything continues to work correctly.
Do: Update sitemap.xml and robots.txt

Update your Sitemap.xml and Robots.txt files to reflect any changes in your website's URL structure. Read more about sitemaps and Drupal’s XML sitemap modules here.

Do: Monitor performance

Monitoring a website after migration is an important step to ensure that everything is functioning correctly and to identify any issues that may arise. Here are some steps you can take to monitor your Drupal 9 website’s performance after migration:

  • Monitor traffic and rankings
  • Check for broken links
  • Monitor website speed
  • Monitor server errors
  • Test forms and conversions
Don’t: Delete your old site

We know already mentioned this in our Do’s but we can’t stress enough how important this step is! Even after the website migration, it is recommended not to delete your old site immediately. There are several reasons why you should keep your old site for a while. Like backup and recovery, content comparison and redirects.

Don't: Move to live before testing/reviewing it completely

It's important to thoroughly test and review the new site before pushing it live to ensure that it is functioning correctly and there are no errors or issues that could harm your SEO. By taking the time to test and review the new site, you can identify and fix any potential issues before they impact your rankings and traffic. Make sure you have completed these activities before pushing it to live:

  • Checked all links
  • Verified title tags and meta descriptions
  • Tested site speed
  • Verified site structure and content
  • Tested contact forms
  • Ensured that all content and pictures are present on the new page
  • Confirmed URL structure and 301 redirects are set up correctly
Don’t: Schedule migration during peak traffic stretches

To minimize the potential negative impact of a website migration, it is generally advisable to avoid scheduling it during peak traffic periods when the site is experiencing its highest levels of user activity. This is because any disruptions to the site's functionality or accessibility during these times could lead to a poor user experience and potentially harm your search engine rankings or revenue. Instead, consider scheduling the migration during a time when traffic levels are typically lower, such as weekends or overnight, to minimize the risk of disruption and ensure a smoother transition for your users.

What happens if there’s a drop in ranking after a migration?

Let’s get straight to the point. If you notice a drop in your SEO ranking after a migration:

  • Keep calm. Take a step back and reassess the situation. Many times the drop is temporary because search engines will need to re-crawl your website.
  • Check if this is happening due to an update in the algorithm
  • Use Google Analytics to identify the pages that have been affected the most and are getting the least organic traffic
  • Create a list of those URLs. Analyze these pages for URL structure, broken links, duplicate content, page errors, canonical URLs and other content changes.
  • Use a page performance testing tool like GTMetrix and check if the performance has been affected. Follow best page speed practices (optimized images, CSS and other files) to fix this issue.
  • If you have changed your hosting provider along with the migration, find out if there’s a performance issue because of the server change.
  • Make sure all the pages are indexible (at least the ones you want to rank)
Final Thoughts

A successful migration process starts with an in-depth analysis of your current website’s structure, content, and code to identify any potential SEO risks. During this analysis, you should also consider factors such as which CMS version you are currently running, the cost and timeline of the migration process, and how to ensure that your SEO rankings remain intact during the transition. Keep checking your index status in the search console to make sure everything is in order once the migration is complete. Finally, it always helps to communicate regularly with your new hosting provider to ensure that all the performance issues are taken care of in a timely manner. 

A CMS migration does not have to negatively impact your SEO ranking. In fact, a migration to Drupal 9 (or 10), can potentially increase your SEO rankings due to the improved speed and performance of your website. If you’re looking for a 100% Drupal-first company that specializes in Drupal migrations, then look no further than Specbee. Our certified experts have completed numerous successful migrations to Drupal 9 and can help ensure that your website remains SEO-friendly​​. Contact us today for a free consultation and find out how we can help you migrate with ease.

Author: Shefali Shetty

​​Meet Shefali Shetty, Director of Marketing at Specbee. An enthusiast for Drupal, she enjoys exploring and writing about the powerhouse. While not working or actively contributing back to the Drupal project, you can find her watching YouTube videos trying to learn to play the Ukulele :)

Email Address Subscribe Leave this field blank Drupal 9 Drupal 10 Drupal Module Drupal Migration Drupal Planet

Leave us a Comment

  Recent Blogs Image Migrate to Drupal 9 (or 10) Without Losing Your Hard-Earned SEO Ranking Image Get the Most Out of Apache Solr: A Technical Exploration of Search Indexing Image From Mother to Manager - Shreevidya’s Career Story Need help Migrating to Drupal 9? Schedule a call Featured Case Studies

Upgrading the web presence of IEEE Information Theory Society, the most trusted voice for advanced technology


A Drupal powered multi-site, multi-lingual platform to enable a unified user experience at SEMI


Great Southern Homes, one of the fastest growing home builders in the US, sees greater results with Drupal

View all Case Studies

Axelerant Blog: How To Shift-Left With Accessibility

Planet Drupal - Tue, 2023/02/28 - 6:08am
What Is Web Accessibility?

Web accessibility is the practice of designing and building web solutions that everyone can use, no matter what limitations they have. This means that users with low or no vision, color blindness, trouble with motor skills, or inability to hear properly can use any accessible website or application.


Talking Drupal: Talking Drupal #388 - Valhalla Content Hub

Planet Drupal - Mon, 2023/02/27 - 6:00pm

Today we are talking about Valhalla Content Hub with Shane Thomas.

For show notes visit:

  • Joining Netlify
  • Changes at Gatsby
  • What is a content hub
  • How does that differ from a content repo
  • What is Valhalla
  • How does it work
  • Data stitching with GraphQL
  • Can you massage / normalize data
  • Benefits
  • Privacy
  • Production examples
  • How is it structured
  • Do you have to use Gatsby
  • Integrations with Drupal
  • Timing
  • Cost
  • How to sign up
Resources Guests

Shane Thomas - @smthomas3


Nic Laflin - @nicxvan John Picozzi - @johnpicozzi Jacob Rockowitz - @jrockowitz

MOTW Correspondent

Martin Anderson-Clutz - @mandclu Entity Share You configure one site to be the Server that provides the entities, and content types or bundles will be available, and in which languages.


The Drop Times: Importance of Synergy

Planet Drupal - Mon, 2023/02/27 - 5:44pm

"The whole is greater than the sum of its parts," said Aristotle. It is especially relevant while talking about a free software ecosystem.

In functional logic, it is helpful to break up things into smaller units so that it becomes manageable. There would be more focus, and bugs are easy to be identified.

The non-core modules that follow the strict guidelines for quality code are the building blocks contributing to Drupal's greatness. The insistence on quality is what binds these compartments seamlessly. Each team has its role. But their collective can touch in many ways than these individual parts could deliver.

The synergy between different constituent units is paramount in a loosely knit community formed based on superior technology and grand philosophy. Entities working in this space should constantly meet in some way or another and be able to share their ideas to achieve this synergy. The DrupalCons and DrupalCamps are always facilitating this catchup game.

DrupalCon Pittsburgh Early Bird Registration is now open and is available through April 02. But the deadline to apply for a scholarship will end tomorrow. Early Bird Registration for the 6th annual DrupalCamp Ruhr will also end tomorrow. DrupalCamp Florida is now over, and here is a look back. Read our interview with Melissa Bent and April Sides, published as part of DrupalCamp Florida. DrupalSouth (New Zealand and Australia) has called for paper submissions for their upcoming event in Wellington. They have opened registrations for the camp, and the first 50 registrants will get an early bird offer. If you are eager to attend Drupal training, you can consider registering for the training sessions at DrupalCamp New Jersey. Fan tickets are available for DrupalCamp Poland. Here is a list of current sponsors for Drupal Developer Days Vienna. Some sponsoring slots for the NERD Summit might still be open. The four-day DrupalCamping Wolfsburg, fashioned as a BAR Camp, has limited tickets, and those interested could rush for registration.

This March, we have the DrupalCamp NJ and the NERD Summit coming up. MidCamp is in April. DrupalSouth Wellington, The Stanford WebCamp, DrupalCamp Ruhr, and DrupalCamp Poland will follow in May. Not soon after, we have the first annual DrupalCon of this year in Pittsburgh by the beginning of June, just after the DrupalJam. In the same month, we have Drupal Camp Asheville and Drupal Developer Days Vienna. Let these gatherings be an excellent start for your Drupal journey if you are new to the community. For those already here, it is time to synergize with the rest. That is for this week. Thank you.

Sebin A. Jacob
Editor-in-Chief, The Drop Times


CTI Digital: How Drupal Has Evolved to Make Content Editors Lives Easier

Planet Drupal - Mon, 2023/02/27 - 4:44pm

Drupal has come a long way since its inception as a content management system (CMS) in 2001. Over the years, Drupal has continued to evolve and improve, positioning itself as a top choice for organisations looking to build a dynamic and engaging online presence. 

One of the most significant changes in Drupal's evolution has been its focus on becoming more user-friendly for content editors. In this blog, we’ll explore some of the biggest changes that have occurred from Drupal changing its positioning to being more user-focused.


Chromatic Insights: How to Add Tugboat Live Previews to Drupal Contrib Modules

Planet Drupal - Mon, 2023/02/27 - 4:35pm
It is now dead simple to add Tugboat to Drupal contributed modules.

CTI Digital: Drupal Through The Years: The Evolution of Drupal

Planet Drupal - Mon, 2023/02/27 - 4:17pm

Drupal has long been known as a powerful and flexible content management system (CMS), but it’s also well known for its complexity. In the early days of Drupal, creating and managing content required a deep understanding of the platform, its architecture and many intricacies, making it challenging for non-technical users to navigate.

However, over the years, Drupal has made significant changes to become more user-friendly and accessible for content editors. In this blog, we’ll take a closer look at the evolution of Drupal and the changes that Drupal and the community have made to create a more accessible platform for content editors.


ADCI Solutions: Olivero | New Default Front-End Theme for Drupal 10

Planet Drupal - Mon, 2023/02/27 - 2:42pm

Modern, attractive, clear, contrasting — these are just some adjectives you could use to describe Olivero, the new theme for Drupal sites. Read our post to learn about its features and the ideas behind it.


Consensus Enterprises: Aegir5 Development is Happening!

Planet Drupal - Sat, 2023/02/25 - 3:00pm
Aegir5 development is happening! We (Consensus) have been making steady progress on it over the last few years and are looking to kick off a new burst of focused development. Here’s a summary of progress that has been made so far and how you can contribute. First off, as you’re probably aware, Aegir5 is a complete re-write of Aegir. We are intending to build on all the great aspects of Aegir, while freeing ourselves from a codebase that is rooted in PHP 4.
Categories: Drupal 10 upgrade: Defining the project scope

Planet Drupal - Sat, 2023/02/25 - 7:19am

Let's define the scope and goals of our project to upgrade this very website to Drupal 10.

Essentially, that's it: we want to upgrade this website to Drupal 10 so that we can benefit from security releases etc. At the moment we want to do so with the minimum of effort, so I don't want to have to be writing lots and lots of code or changing fundamentally how the site works, but I am up for simplifying things if it gets us to a point where we have to maintain less code.

Since Drupal 9, major version upgrades now take this basic form:

  • Update your code to be fully compatible with the last version of Drupal, removing all deprecations: hard.
  • Upgrade to the new version of Drupal: easy!

I'm going to install and use the fantastic Upgrade Status module to get a detailed handle on what we need to change, upgrade and rewrite to get the site working in Drupal 9, but ready for Drupal 10. We'll use that as a basis to see what we need to upgrade, the best plan for each component and go from there.

Upgrade status - First pass

We previously have composer require'd the upgrade status module into our codebase, so after enabling and running the report, here are the major findings that concern us for this series:

  • We'll need to upgrade to PHP 8.x, the site is currently running on PHP 7.4.
  • We're using deprecated or obsolete modules that come with core and will be removed in Drupal 10. This is a rather scarily long list for us:
    • CKEditor
    • Color
    • RDF
    • Seven
    • Stable

But other than that, we're good to go from an environment point of view.

Contrib projects

Upgrade status breaks the list of contributed projects down into a few sections, those are:

  • Projects that need an upgrade that might make them Drupal 10 compatible:
    • Better exposed filters
    • Components
    • Disqus
    • Advanced link
    • Entity browser
    • jQuery UI Slider
    • Scheduler
    • Simple XML Sitemap
    • Twig Tweak
    • Webform
  • Projects that don't have Drupal 10 releases yet, so either require patches or work to get them to Drupal 10:
    • Entity Embed
    • jQuery UI Sortable
    • Kraken
    • Markdown
    • Social media share
    • Term Reference Change
    • Unified Twig Extensions
    • Video Embed HTML5
    • Weight
  • Projects that are compatible with Drupal 10 already, I'll not list those, but there are plenty already, it's great to see community support for Drupal 10.
Custom code

Upgrade status will scan your code and tell you if there are problems that can be spotted that will stop the code working with Drupal 10. This is static analysis, so isn't perfect, but is a really good start. We have a few custom modules doing very specific things on our site, but we have a custom theme, doing quite a lot of custom things, and that's where the main bulk of the issues the scanner found are, so we're going to need to set aside some time for that.


This site was built in the early Drupal 8 days, and we've not actually made too many changes since, specifically when we upgraded to Drupal 9 we basically did the smallest amount of work to get it there. How you'd typically handle media on a Drupal site has fundamentally changed since we built this site, in that you'd likely use the core Media module and add entity reference fields to your entities rather than adding image/file fields directly. However, we never had that luxury and never got around to changing our approach to use the core Media framework.

So, we're going to allow ourselves a bit of scope creep to do this 'sub project' given that the benefits are that we're going to be able to remove a bunch of modules: entity browser, file browser, etc. that will then mean that we don't need to upgrade those modules and our dependencies will be better supported: since they'll be in Drupal core. It's no slight against those modules, it's just that we don't need the functionality they bring, for our site today.

The scope/plan

So roughly the scope/plan is shaping up to be:

  1. Convert our file/image fields to core media, and remove entity browser, file browser, etc.
  2. Update our custom code
  3. Evaluate the remaining upgradeable contrib projects to see if we can remove them, and if not, upgrade them.
  4. Evaluate the remaining non-upgradeable contrib projects to see if we can remove them, and if not, work with maintainers to get them upgraded.
  5. Handle the core modules that have been marked as deprecated or obsolete.
  6. Upgrade the PHP version we use to run the site
  7. Get the site running in tip-top condition with the latest Drupal 9 etc.
  8. Do the Drupal 10 upgrade.

Then we'll have a shiny Drupal 10 install, ready for the next few years of security patching.


Golems GABB: What is Predictive Marketing?

Planet Drupal - Fri, 2023/02/24 - 2:24pm
What is Predictive Marketing? Editor Fri, 02/24/2023 - 16:41

Predictive marketing is a type of marketing that uses a large amount of information to predict customer behavior and needs accurately. It involves the analysis of all data to determine the best and most effective version of the marketing strategy. 
Based on a client's past shopping experience, marketers develop marketing strategies. Therefore, you can create more effective personalized ads in the future that will increase conversions. By forecasting correctly, you can also reduce customer churn and increase demand for your products or services. Stand out from the competition and stay ahead of the game by doing this.
Many famous companies have used predictive modeling in marketing for years because they have seen effective results. When analytics are adequately conducted, websites can increase their customers and orders. A business owner who has mastered predictive marketing can anticipate their target audience's needs and keep up with all current trends.


Axelerant Blog: Why Axelerant Invests In Leadership Training For All

Planet Drupal - Fri, 2023/02/24 - 1:29pm

This article enumerates why an organization must invest in leadership training programs for budding and existing leaders.