LN Webworks: 5 ways to Enhance Customer Experience of Drupal Websites
Customer experience is unarguably the center around which modern businesses are revolving today. Every potential strategy they plan to implement gets filtered through the lens of user experience first. As a Drupal web development company, we recognize the significance of an approach focused on customer needs which can result in increased customer loyalty, enhanced reputation, and greater revenue opportunities.
According to the current state of affairs, user experience is largely dependent upon business websites today. After all, your website is the face of your organization and the medium through which a majority of customers interact with you. Phenomenal user experience is characterized by high-speed, user-friendly, and interactive websites. Cutting-edge content management systems (CMSs) such as Drupal infuse your site with all these phenomenal traits.
Salsa Digital: Salsa at DrupalSouth 2023
LN Webworks: Drupal Websites are Not Good in Terms of Design: The Common Myth
According to research, around 2 billion websites run on Drupal globally. Such a massive appeal has made Drupal the leading content management system (CMS) worldwide. It has captivated the hearts of eminent enterprises with its 42,650 modules and 2,900 themes. As a Drupal Web development company, you can leverage Drupal's top-notch security features to provide your clients with unparalleled cybersecurity. Over the years, the crucible of cutting-edge advancements has forged Drupal’s features to make it unmatchable. It doesn’t matter whether it is a basic website or a content-heavy website, Drupal is packed with capabilities to handle them all.
The Drop Times: A Passionate Farmer Who Found Drupal by Chance | Interview with Shani Maurya | Midcamp23
clemens-tolboom commented on issue godotengine/godot-git-plugin#176
Have you the correct plugin? I guess so but checkout https://github.com/godotengine/godot-git-plugin/wiki In #183 for v4.0.3.rc1 I can test the plu…
clemens-tolboom commented on issue godotengine/godot-git-plugin#177
In #183 I made is work by creating the file #183 (comment) In that issue the UI reports file not found error. Are these duplicates: #183 / #185 / #176
clemens-tolboom commented on issue godotengine/godot-git-plugin#185
Duplicate of #183
LN Webworks: How AI is Shaping the Future of Content Management and the Web?
Artificial intelligence is a highly potent technology that has revolutionized the world. As AI continues to gain traction, it's only natural that content management systems (CMS) like Drupal will integrate with this technology. CMS like Drupal can leverage AI-powered tools to provide more personalized content. AI is serving as an empowering center for smart data-driven decision-making, automation, enhancing customer experience, minimizing human errors, and analyzing upcoming trends. If we look into the current state of affairs, artificial intelligence is slithering into the world of content management as well. Experts believe that the future of AI is that it will get so deeply embedded into content management that everything will be driven by it.
ComputerMinds.co.uk: Removing invalid query string parameters passed to a view
As a Drupal site administrator, you may notice in the website logs that there might be a large number of repeated log messages along the lines of "An illegal choice has been detected. Please contact the site administrator." We recently had this problem on a Drupal site that was upgraded from Drupal 7 to Drupal 9 which featured a product search that was built using Views.
Due to slight differences in the way in which the view and facets were built in the Drupal 9 site, this resulted in slightly different URLs being used when the user would filter the search results. For a standard site user who would be interacting with the form elements to filter the view, this was not a problem. However, search engines that had indexed these older URLs from the Drupal 7 site were still trying to crawl the search page regularly, with (what are now) invalid query string parameters.
At the times when the search engines were crawling these pages, this would result in hundreds if not thousands of log messages being logged. Although not anything that would directly impact the users of the site, it’s not ideal to have so many log messages polluting the site logs. Having so many log messages makes it harder to track down and find actual more pressing issues that may need to be addressed.
It makes sense to try and eliminate the cause of this issue and stop so many error messages from being logged. This can be easily accomplished by the following snippet of code which uses hook_views_pre_build().
use Drupal\views\ViewExecutable; /** * Implements hook_views_pre_build(). */ function my_module_views_pre_build(ViewExecutable $view) { if ($view->id() === 'my_view_name') { /** @var \Symfony\Component\HttpFoundation\Request $request */ $request = $view->getRequest(); /** @var \Drupal\Core\Http\InputBag $query */ $query = $request->query; if ($sort_by = $query->get('sort_by')) { // Compare to the list of allowed values to see if it's valid. // If it's not, then remove the sort_by from the query completely. $view_sorts = $view->sort; if (!isset($view_sorts[$sort_by])) { $query->remove('sort_by'); } } } }
Let's quickly break down the code example above. For a custom module named my_module, we are implementing the hook_views_pre_build hook inside of the my_module.module file. We then check the view ID of our view to see if it’s the one we are trying to target and then get the HTTP request object from the view, checking the query string values of the request.
The query string value we are interested in (which was causing the error messages) is named sort_by. We get the list of allowed sort values from the view and then compare this to the value in the query string. If the value trying to be used isn’t a valid value for our view, we then unset this from the query.
Of course, if you were looking to target a particular display of the view and not all of them then you’d need to add some additional logic to check the current_display of the view. For example, change the line:
if ($view->id() === 'my_view_name') {
to
if ($view->id() === 'my_view_name' && $view->current_display === 'page_1') {
which will restrict the code block to only run for the page_1 display.
clemens-tolboom commented on issue godotengine/godot-git-plugin#183
On MacOS downloading through the AssetLib v3.0.0 I get no godot-git-plugin.gd file. tree addons addons └── godot-git-plugin ├── LICENSE ├── THIRDPA…
LN Webworks: Free Drupal 9 Themes for Building Media and Publishing Websites
Did you know that eminent news and media networks such as Al Jazeera, The Economist, the Walt Disney Company, CBS, Time Inc., and Viacom rely on Drupal 9 to support their magnificent websites? The right Drupal 9 theme can help you create an engaging and functional media and publishing websites that stands out in a competitive landscape. If you also run a media and publishing company, this revelation might leave you startled. You may begin to ponder why the top players in the media industry are so invested in Drupal.
Make Drupal Easy: The latest innovations in Drupal
Drupal is an open-source content management system that powers millions of websites around the world. It is known for its flexibility, scalability, and security. Drupal is used by organizations of all sizes, from small businesses to large enterprises and government agencies.
Evolving Web: Maximizing and Evidencing the ROI of Your UX Design Project
UX (user experience) design is a powerful way to create valuable relationships with site users. You know it, we know it, and you need only glance at big brands to confirm they know it too. But can you prove it?
While gut instinct and anecdotal evidence are valuable, they aren’t enough if you want to be data-driven, scale results and persuade stakeholders. To get the insights you need, it’s important to track and demonstrate return on investment (ROI). ROI measures performance by comparing what you put in with what you get out.
Measuring the ROI of design can be tricky. This is because design’s impact on the bottom line is often indirect and hard to separate from the successes of other business areas, such as sales and marketing. But where there’s a will there’s a way. As design leaders, we’re no stranger to channeling creative energy and strategic thinking into problem solving.
This guide offers practical advice and best practices to help you track the ROI of your design projects. It covers:
- Calculating ROI and choosing the right key performance indicators (KPIs)
- Maximizing ROI by generating more value and increasing efficiencies
- 10 statistics that make a persuasive case for investing in UX design
Leaders need to track and demonstrate the ROI of UX design to make a strong business case for investing in it.
Calculating ROI and Choosing the Right KPIsThe conventional way of calculating ROI is using monetary values:
ROI = net income / cost of investment x 100
This is particularly appropriate in industries where quick conversions and a straightforward sales funnel are the norm, such as the FMCG industry.
But for many organizations, the user’s journey to conversion is longer and more convoluted. It may happen over weeks, months or even years with a multitude of touchpoints along the way. What’s more—generating profit isn’t always the goal of a project. For example, it could be to raise awareness, influence opinions, provide public services, or give back to the community.
A better way to demonstrate the ‘returns’ of your design efforts can be to use a Key Performance Indicator (KPI). This is a quantifiable measure used to gauge impact, set goals, and determine success. KPIs can look like anything from newsletter registrations or petition signatures to support calls or customer ratings.
- Choose KPIs that align with your organization’s strategic objectives—such as increasing conversions, entering new markets, building brand awareness, accelerating time-to-market, or reducing overheads.
- Avoid superficial ‘vanity metrics’ that don’t reflect your design efforts or distract you from measuring real business successes.
- Consider how KPIs can help you get internal support for your project. Involve important stakeholders in the UX discovery and pick KPIs they care about.
- Consider assigning a dollar value to your KPIs to help you estimate the ROI in monetary terms.
KPIs example: Evolving Web collaborated with OCAD University on the redesign of its admissions website. OCAD U’s primary goal was to increase applications by making the admissions process more engaging and easier to follow. Therefore, an important KPIs was the number of applicants. Applicants increased by 15% within a few weeks of the launch, demonstrating the project’s considerable success.
Maximizing the ROI of Your Design ProjectTracking and analyzing KPIs helps you to identify what’s working and what isn’t. This allows you to make adjustments to realize the full potential of your current design project and future ones. You can also draw on industry best practices to inform your design strategy from the get-go.
At Evolving Web, we draw on Design Thinking: an iterative and collaborative process that puts users at the forefront of a project. It consists of five core stages: empathize, define, ideate, prototype, and test the design. According to a model developed by Forrester, Design Thinking brings an impressive median ROI of 229% per project. At an organizational level, the model demonstrated that a mature Design Thinking practice can achieve an ROI of between 71% and 107%.
Another best practice we draw on is design systems: a set of standards, style guides, and components used to unify a brand's experience. A design system enables designers to reuse core elements, meaning they don’t have to reinvent the wheel and can focus on more complex tasks. It reduces unnecessary labour hours and leads to better performing designs—both of which have a positive impact on ROI.
Productivity dips while a new design system is ramped up, but exceeds standard levels once the system is firmly in place. Credit: Callahan (2021.)
10 Statistics That Make a Strong Business Case for UX DesignNeed some cold, hard data to back up your ideas? We’ve gathered 10 persuasive facts and figures that’ll help you make a compelling business case for investing in UX design.
- Users’ first impressions of a website are 94% design-related (Adobe.)
- 75% of users judge a company's credibility based on its website design (Stanford University.)
- 94% of people said that web design was the major reason they mistrusted or rejected a website (Rareform New Media.)
- 59% would rather read beautifully designed content instead of something plain and simple (Adobe.)
- 38% of people would leave a site if its content or layout was unattractive (Adobe.)
- 39% of people will stop engaging with a site if images take too long to load (Akamai.)
- Consumers use an average of 5 different devices per person—and 8 out of 10 will leave a website if the content doesn’t display well on their device (Adobe.)
- Google started giving preferences to responsive websites in its search engine results pages in 2015 (Google.)
- Decreasing mobile site load times by one tenth of a second can increase conversion rates by 8-10% (Google.)
- Conversions can fall by up to 20% for every extra second a mobile page takes to load (Google.)
Evolving Web has spent more than 15 years empowering organizations to create deeper connections through valuable digital experiences. Our Design Team harnesses research, strategy, and innovation to unleash the creative potential in every project—no matter its size. Partner with us and you’ll gain the confidence, wisdom, and support to take your digital design to the next level.
//--> //--> + more awesome articles by Evolving Webclemens-tolboom commented on issue godotengine/godot#66247
I followed along with the 3D https://docs.godotengine.org/en/stable/tutorials/animation/playing_videos.html#displaying-a-video-on-a-3d-surface on 4…
Matt Glaman: Drupal module semantic versioning for Drupal core support
A large amount of our time during the Drupal 10 readiness effort was around semantic version discussions. Folks were creating new major versions to add Drupal 10 support while dropping Drupal 9 simultaneously. Technically that follows the semantic versioning guidelines but is a horrible user experience. Users must update the module when they upgrade Drupal core to Drupal 10. Ideally, users could update their modules first and then upgrade Drupal core.
This blog post is taken from part of my talk "Lessons learned from helping port the top contrib projects to Drupal 10." It is also inspired by my coworker Jakob Perry's blog post, "Don’t go making major version changes."
Evolving Web: Porting a CKEditor 5 Plugin to Drupal 10
CKEditor 5 was introduced in Drupal 9.3 and is now the default WYSIWYG editor in Drupal 10. It’s no mere update on its predecessor – in fact, CKEditor 5 was written completely from scratch.
The good news is that Drupal 10 users get a completely overhauled content editing experience. CKEditor 5’s features include a vastly improved user interface and premium collaboration tools.
But there’s some groundwork to be done first. Due to their considerable differences, you can’t simply reuse CKEditor 4 code with CKEditor 5.
Some third-party plugins have already been ported to CKEditor 5. But their implementation is different and you’ll need to rewrite any custom code you developed for CKEditor 4.
Our developers at Evolving Web created this guide to make the implementation process easier for you. We’ve used the plugin ckeditor5-anchor as an example. Below, you’ll find step-by-step instructions with code for integrating the anchor plugin with Drupal.
Code ExamplesThe ckeditor5_dev module is shipped with a handy starting template. This is based on the Block Widget plugin from the CKEditor 5 documentation: Implementing a block widget.
Also check out this list of contrib modules that provide CKEditor 5 plugins, such as ckeditor_accordion.
Step 1: Create a Custom ModuleLet’s name the module ckeditor5_anchor. The module should not contain any PHP code. Aside from the info.yml file, the module will include the following.
Ckeditor5_anchor.ckeditor5.yml ckeditor5_anchor_anchor: ckeditor5: plugins: - anchor.Anchor drupal: label: CKEditor5 Anchor library: ckeditor5_anchor/anchor admin_library: ckeditor5_anchor/anchor.admin toolbar_items: Anchor: label: Anchor elements: -Note that library is the plugin code itself. In our case, admin_library is CSS to be applied on the text format configuration page. CKEditor provides more details about the file structure.
ckeditor5_anchor.libraries.yml anchor: remote: https://github.com/bvedad/ckeditor5-anchor version: "1.0.0" license: name: GNU-GPL-2.0-or-later url: https://github.com/ckeditor/ckeditor5/blob/master/LICENSE.md gpl-compatible: true js: js/build/anchor.js: { preprocess: false, minified: true } css: theme: css/anchoractions.css: { } css/anchor.css: { } css/anchorform.css: { } css/anchorimage.css: { } dependencies: - core/ckeditor5 anchor.admin: css: theme: css/anchor.admin.css: { }The anchor library contains:
- js/build/anchor.js which is the plugin code.
- CSS files are taken from the plugin source. For some reason, CSS files for this particular plugin are actually SCSS files with .css extension. You’ll need to convert them to true .css files.
Copy it from the CKEditor 5 plugin starter template.
{ "name": "drupal-ckeditor5-anchor", "version": "1.0.0", "description": "Drupal CKEditor5 Anchor plugin", "author": "", "license": "GPL-2.0-or-later", "scripts": { "watch": "webpack --mode development --watch", "build": "webpack" }, "devDependencies": { "@ckeditor/ckeditor5-dev-utils": "^30.0.0", "ckeditor5": "~34.1.0", "raw-loader": "^4.0.2", "terser-webpack-plugin": "^5.2.0", "webpack": "^5.51.1", "webpack-cli": "^4.4.0" }, "dependencies": { "@ckeditor/ckeditor5-core": "^36.0.1", "@ckeditor/ckeditor5-image": "^36.0.1" } }In our case, we also needed @ckeditor/ckeditor5-core and @ckeditor/ckeditor5-image. Pay attention to the webpack hints when compiling js/build/anchor.js.
webpack.config.js.Copy it from the CKEditor 5 plugin starter template. Both of CKEditor’s documentation examples use webpack, although you may decide to use another tool to pack your javascript code.
Create the following folders:
- ckeditor5_anchor/js/build for your minified plugin code.
- ckeditor5_anchor/js/ckeditor5_plugins/anchor for the source JS code.
- ckeditor5_anchor/css
- ckeditor5_anchor/icons
Clone the plugin source code somewhere outside of your site.
gh repo clonebvedad/ckeditor5-anchorCopy ./src and ./lang folders into ckeditor5_anchor/js/ckeditor5_plugins/anchor.
Copy CSS and icon files into ckeditor5_anchor/css and ckeditor5_anchor/icons respectively. They’re located in the ./theme folder for the anchor plugin.
Step 3: Install the Dependencies npm installGenerate js/build/anchor.js.
./node_modules/.bin/webpack --mode development --watchAt this stage, you will likely encounter missing dependencies warnings.
Step 4: Modify the source codeAdd ckeditor5_anchor/js/ckeditor5_plugins/anchor/src/index.js.
/** * @file The build process always expects an index.js file. Anything exported * here will be recognized by CKEditor 5 as an available plugin. Multiple * plugins can be exported in this one file. * * I.e. this file's purpose is to make plugin(s) discoverable. */ import Anchor from './anchor'; export default { Anchor, };We need to modify the import section to import all CKEditor libraries from one of the files under ckeditor5/src/ (ckeditor5_achor/node_modules/ckeditor5/src/). For example:
-import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; -import MouseObserver from '@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver'; -import Clipboard from '@ckeditor/ckeditor5-clipboard/src/clipboard'; -import Command from '@ckeditor/ckeditor5-core/src/command'; -import findAttributeRange from '@ckeditor/ckeditor5-typing/src/utils/findattributerange'; -import toMap from '@ckeditor/ckeditor5-utils/src/tomap'; -import Collection from '@ckeditor/ckeditor5-utils/src/collection'; -import first from '@ckeditor/ckeditor5-utils/src/first'; -import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview'; +import { Plugin } from 'ckeditor5/src/core'; +import { MouseObserver } from 'ckeditor5/src/engine'; +import { Clipboard } from 'ckeditor5/src/clipboard'; +import { Command } from 'ckeditor5/src/core'; +import { findAttributeRange } from 'ckeditor5/src/typing'; +import { toMap, Collection, first } from "ckeditor5/src/utils"; +import { ButtonView } from 'ckeditor5/src/ui';Import icons shipped with the source plugin from the right Drupal module path.
-import anchorIcon from '../theme/icons/anchor.svg'; +import anchorIcon from '../../../../icons/anchor.svg';Replace importing all icons loaded from the CKEditor core @ckeditor/ckeditor5-core with import { icons } from ckeditor5/src/core.
-import pencilIcon from '@ckeditor/ckeditor5-core/theme/icons/pencil.svg'; +import { icons } from 'ckeditor5/src/core';Use the icons variable in the code where an icon is used.
-this.editButtonView = this._createButton( t( 'Edit anchor' ), pencilIcon, 'edit' ); +this.editButtonView = this._createButton( t( 'Edit anchor' ), icons.pencil, 'edit' );Almost there! One more change is needed specifically for ckeditor5-anchor.
function isTyping( editor ) { - const input = editor.plugins.get( 'Input' ); - - return input.isInput( editor.model.change( writer => writer.batch ) ); + const batch = editor.model.change( writer => writer.batch ); + return batch.isTyping; }Note that the source plugin uses an outdated method. Input.isInput was replaced with batch flags. It’s important to expect these issues and always QA your CKEditor5 plugins after porting them.
Additional Notes- anchor.admin library contains a CSS file: ckeditor5_anchor/css/anchor.admin.css.
This icon is to be displayed on the text format configuration page.
- You can migrate CKEditor4 plugin settings to a new CKEditor5 plugin using \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade. Refer to examples in the core.
- CKEditor 5 Dev Tools module provides a handy tool to inspect CKEditor5 elements. It displays plugin model schemas.
We’d recommend reading all of the tutorials available in CKEditor 5 Framework documentation. You can safely skip the editor init part as Drupal already inits the editor for you.
In particular, read up on Drupal’s slightly different way of importing JS dependencies as well as icons:
- Creating a basic plugin
- Defining a model and a view
- Implementing a block widget
- Implementing an inline widget
Useful pages from drupal.org include:
- Testing the CKEditor 4 to 5 upgrade path
- Upgrading modules extending CKEditor 4 to support CKEditor 5
- Upgrade coordination for modules providing CKEditor 4 plugins
Specbee: How to Setup a Drupal Site on Pantheon from Scratch
Did you know Pantheon is one of the largest hosting providers for Drupal websites the world over? As of 2021, they host over 300,000 Drupal sites*! Launched in 2010, Pantheon offered Drupal-specific hosting environment that was optimized for Drupal websites. As a website management platform, they offer an integrated set of services and tools allowing teams to build, launch, and manage websites.
Drupal and Pantheon are a great match. Find out more about this as you read on AND also learn how to install Drupal on Pantheon from scratch. There’s more! You will also find out about setting up Pantheon locally, interesting commands for transfers, command line interactions and more. Dive in!
Why do Drupal developers Love PantheonDrupal developers prefer Pantheon because it is easy to use and set up, but more importantly because it offers an environment optimized for Drupal sites. Even the security features are specifically tailored to the needs of Drupal websites. A few more reasons why Pantheon is a great choice for developers:
- Automated backups, security monitoring and Automated updates.
- Website Performance Monitoring using New Relic
- Git and Version control on all domains
- Redis and Varnish cache to speed-up page delivery by caching
- Multi-dev environment to easily keep track of code changes
- Highly responsive Pantheon support team to help work through server related issues and technical issues.
It really is a very straightforward process. Follow the steps below to setup Drupal 9 on Pantheon
1. Visit https://pantheon.io/ to register to Pantheon using your email address
2. Click on Get Started
3. Once logged in, you will be land on the workspace page
4. Click on Create New Site as shown below.
5. Choose what kind of site you want to create. Let’s go with Drupal 9. Read this article to find out why.
6. Provide your Pantheon site details like the Name of the Site and continue.
7. This process will take a few moments. Once it's done, click on “Visit Pantheon Site Dashboard.”
8. Visit your website, by clicking “Visit Development Site”.
Installing and Customizing your Drupal 9 siteNow that you have set up Drupal on Pantheon, let’s install and customize your Drupal site. Upon visiting your website for the first time, you will be directed to the Drupal installation page.
- Choose the language of your choice. I’ll go with English.
- Choose the Standard Installation profile.
- Configure your site with information like Name of the site, Site Email Address, Username and password.
- Hit Save.
And your Drupal 9 site is ready!
Setting Up Pantheon LocallyUsing the following commands to set up Pantheon on your local system:
Create a new directory “pantheon” and enter it
mkdir pantheon && cd pantheon
Go through interactive prompts to get your site from Pantheon and create a .lando.yml file
lando init
Start up the application
lando start
Import your database and files
lando pull
The Get and Put commands help create a file transfer request in SFTP.
- First, login to the server using the SFTP command provided in Connection Info
- If you’re logging in for the first time, you need to generate machine tokens to uniquely identify your machine and securely authenticate yourself. Find out how to generate machine token here.
Use the GET command to transfer files from a remote server to your local system
get
get -r
Use the PUT command to transfer files from your local system to the remote server
put
put -r
Terminus is a command-line interface (CLI) provided by Pantheon, which allows you to manage Drupal sites using a set of powerful tools. It is built on top of the Drush command-line tool, and provides additional functionality that is specific to Pantheon.
Developers can manage their Drupal sites from the command line, without the need to use the Pantheon dashboard.
To install Terminus, go here: https://docs.pantheon.io/terminus/install
Format of the terminus command: terminus command:subcommand .
The terminus command structure includes . in order to determine the target site and environment to execute the command.
For example, running the clear cache command for the Dev environment of a site labeled "techxspecbee"
To run the configuration import drush cim command for the Live environment of a site labeled "techxspecbee"
We can get a list of all available commands using
* References: https://www.drupal.org/pantheon
Drupal provides a robust content management system that is flexible and highly customizable, while Pantheon provides a secure and scalable hosting platform that is optimized for Drupal sites. The combination of Drupal and Pantheon allows developers to build websites quickly and easily, while also ensuring that they are secure and performant. With features like automatic backups, continuous integration, and easy site management, Pantheon is a great platform for Drupal developers looking to build websites that can scale with their projects. Are you looking for Drupal experts to build and manage your Pantheon-hosted site? We’d love to help! Contact us today and let’s get started.
Email Address Subscribe Leave this field blank Drupal Drupal 9 Drupal Development Drupal Planet Drupal TutorialLeave us a Comment
Recent Blogs Image How to Setup a Drupal Site on Pantheon from Scratch Image Understanding Update and Post Update Hooks for Successful Drupal Site Updates Image Embracing Achievements - Gagana Girish’s Living Dream Want to extract the maximum out of Drupal? TALK TO US Featured Case StudiesUpgrading the web presence of IEEE Information Theory Society, the most trusted voice for advanced technology
ExploreA Drupal powered multi-site, multi-lingual platform to enable a unified user experience at SEMI
ExploreGreat Southern Homes, one of the fastest growing home builders in the US, sees greater results with Drupal
Explore View all Case Studiesmandclu: A Major Step Forward for Smart Date
LN Webworks: How Can Drupal Make Online Marketing Easy
Drupal has been the most advanced and preferred online marketing and content management system for years now. Prestigious websites such as NASA, Tesla, Oxford University, Virgin, and General Motors have unleashed the power of Drupal to excel in their respective domains.
Simple content authoring tools, built-in accessibility tools, multilingual functionality, seamless integration with third-party tools and services, cutting-edge security features, and open-source licensing are some Drupal features that have helped it supersede all its competitors. Besides, its top-notch SEO-friendly modules have made multitudinous websites earn first-page rankings on search engines. This has brought significant increments in their customer reach, acquisition, and retention. Their revenue has also escalated manifolds. Isn’t it fascinating?