Skip to content
Learnomy

SEO Plugin Handoff

Learnomy prints its own canonical links, Open Graph tags, meta descriptions, and Schema.org structured data on every course, catalog, category, instructor, and certificate page, so search engines and social previews work on a site with no SEO plugin installed. When you also run Yoast SEO or Rank Math, the two do not fight: they own the pages they can see, and Learnomy owns the pages they cannot.

Who owns what

On Learnomy's own pages, Learnomy owns the head tags. Courses, lessons, quizzes, categories, instructor profiles and certificate verification live in Learnomy's own database tables and are served by Learnomy's router. They are not WordPress posts, so Yoast and Rank Math cannot see them: they have no snippet editor for a course, no canonical of their own to print for one, and no way to know what the page is. If Learnomy stepped aside on those pages, nobody would print a canonical or an Open Graph tag at all, and the shared link would fall back to whatever the theme happened to emit.

On ordinary WordPress pages, your SEO plugin owns them. Learnomy prints nothing on a post, page, or archive it does not serve.

That split is the whole rule. There is nothing to configure.

Which pages Learnomy handles

Page Structured data Canonical, Open Graph, meta description, robots
Course (/courses/:slug/) Course (price, rating, instructor, course instance) Learnomy
Catalog (/courses/) ItemList of published courses Learnomy
Category archive CollectionPage Learnomy
Instructor profile Person Learnomy
Certificate verification (/verify/:uuid/) EducationalOccupationalCredential Learnomy

Because Learnomy owns the snippet on a course page, the per-course Search & Sharing fields are the ones that take effect there -- see Course SEO and Sharing. They are the only snippet control a course has, whether or not an SEO plugin is installed.

What Learnomy detects

Learnomy checks for Yoast SEO (WPSEO_VERSION or the WPSEO_Frontend class) and Rank Math (RankMath or RANK_MATH_VERSION). That detection decides what happens outside Learnomy's routes only. On a Learnomy route the answer is always the same: Learnomy prints its own tags, because it is the only thing on the site that knows what the page is.

Schema.org structured data is never affected by any of this. Learnomy always emits its course-specific JSON-LD -- Course, ItemList, CollectionPage, Person, EducationalOccupationalCredential -- because those are types a general-purpose SEO plugin does not generate.

For developers

learnomy_seo_yield_to_plugin (bool) is the final say on whether Learnomy suppresses its canonical, Open Graph, meta description and robots output. It receives the auto-detected value -- already forced to false on Learnomy's own routes -- and returns the decision.

// Hand Learnomy's own routes to another plugin as well, for a bespoke
// integration that genuinely knows what a course page is.
add_filter( 'learnomy_seo_yield_to_plugin', function ( bool $should_yield ) {
    return true;
} );

Set it to true only if something else really is printing a correct canonical and Open Graph set for course URLs. Without that, the pages go bare.

The JSON-LD output ignores this filter entirely.

Related