Getting started.

Five minutes from the plugin screen to the right tags on every page. Then, if you come from another SEO plugin, one import.

  • WordPress 7.0 or later
  • PHP 8.0 or later
  • One SEO plugin at a time

Install it.

From the plugin screen of your site, or with the zip file.

  1. Add it. In your WordPress admin, go to Plugins › Add New and search for “EasyRankly”, or upload the zip file from WordPress.org.
  2. Activate it. There is no account to create and no setup wizard.
  3. Open EasyRankly. In the admin menu, check the titles, the indexing choices and who the site represents, in Schema and social.
  4. Add the rest when you need it. Languages in EasyRankly › Languages, redirects in EasyRankly › Redirects, snippets in EasyRankly › Custom code.
The EasyRankly menu in the WordPress admin, open on Titles and descriptions

Import from Yoast SEO or Rank Math.

EasyRankly, Import: import from Yoast SEO complete, posts updated 2, values already set in EasyRankly kept 2
  1. Deactivate the old plugin. Yoast SEO or Rank Math: keep it installed until the import is done.
  2. Open EasyRankly › Import. The plugin you come from is detected.
  3. Run the import. SEO fields of posts and terms are copied, and redirects too (Yoast SEO Premium and Rank Math). Nothing you already set in EasyRankly is overwritten.

Two SEO plugins at once print the same tags twice. Delete the old one once the import is done.

Questions people ask.

Can I use EasyRankly together with another SEO plugin?

No. Two SEO plugins print the same tags twice: title, description, canonical and structured data. Deactivate Yoast SEO, Rank Math or any other SEO plugin before activating EasyRankly; EasyRankly › Import copies their SEO fields and redirects.

Does it work on multisite?

Yes. Each site of the network has its own settings, redirects, snippets and languages, with nothing to set up for the network. There are no network-wide features. Deleting the plugin removes its data from every site of the network.

Does EasyRankly collect personal data or send data to external servers?

No. It connects to no external service, does not track visitors and stores nothing about them: what it saves is your settings and SEO fields, in your WordPress database.

Are classic themes supported?

SEO, sitemap, redirects and custom code work with every theme. Two features need a block theme. The breadcrumb uses the WordPress Breadcrumbs block, and its structured data (BreadcrumbList) is printed only when the block is part of the template, which classic themes render after the page head. Multilingual needs a block theme too: with a classic theme, contents, addresses, site title and tagline change with the language, but menus, widgets and texts set in the Customizer show the same text in every language.

How do header, footer and patterns change language?

In block themes, create a template part or a synced pattern with the same name followed by the language prefix: “header-en” for “header”, “Banner – EN” for “Banner”. On the English pages it replaces the original. This is also how each language gets its own menu: the Navigation block in “header-en” shows the English menu. Unsynced patterns become a copy where they are inserted, so they are translated with the page of each language.

Are categories and tags translated?

No, each category or tag is the same in every language, with its address in each language. Its SEO title, description and social texts, and its description, are written in the default language: on the pages of the other languages they are ignored and the title and description templates of that language are used.

What does the “Everywhere” position of Custom code do?

It runs a PHP snippet as soon as the plugins are loaded, on every request, admin included, like the functions.php of a theme: use it to add or remove hooks. It never runs on the Custom code screen when you open it, so a broken snippet can always be fixed there. What the snippet prints at that moment is dropped.

Who can use PHP snippets?

Only users who can edit plugin files (the edit_plugins capability, which on a standard site means administrators). PHP snippets are switched off on sites that define DISALLOW_FILE_EDIT or DISALLOW_FILE_MODS in wp-config.php: existing ones stop running and new ones cannot be saved. HTML snippets need the unfiltered_html capability.

What happens when a PHP snippet breaks?

The code is checked for syntax errors before it is saved, and a snippet that does not parse can be saved only as inactive. If an active snippet throws an error, the error is shown to administrators and the snippet stays on; a fatal error, which breaks the page, switches it off. If a snippet locks you out anyway, add define( 'EASYRANKLY_SAFE_MODE', true ); to wp-config.php: no snippet runs until you remove it.

How are password-protected posts handled?

They are noindex and left out of the sitemap. Their automatic description is empty, so their text never appears in the page source; a description you write for the post yourself is still used.

Are empty archives indexed?

No. A category, tag, author or post type archive with nothing in it is noindex until it has content. A category or tag with its own description stays indexable, since the description is content.

Are feeds and attachment pages indexed?

Feeds are never indexed: they send an X-Robots-Tag: noindex, follow header, so search engines still follow their links. Attachment pages are off by default on sites created with WordPress 6.4 or later. On older sites, turn them off in EasyRankly › Indexing: their address then leads to the file.

Does it work with WooCommerce and ACF?

Yes, without conflicts. The shop page gives the product archive its SEO title, description and canonical, cart, checkout and account pages stay out of the sitemap, and WooCommerce keeps printing its own Product structured data. Products, and any content edited with the classic editor, get the SEO and Language fields in boxes under the editor. Not supported yet: multilingual stores. With ACF, templates can use a custom field with {{cf:field_name}}; values saved inside ACF blocks are not read.

Still stuck?

Ask in the support forum, where the answer helps others too, or write to us.