LifterLMS SEO: What to Index, Schema, Catalogs and Protected Content

A practical LifterLMS SEO guide: what Google can see on a course site, which pages to index or keep out, how to treat catalogs and free lessons, and how to add course schema without breaking anything.

  • Add as a preferred source on Google
Illustration for “LifterLMS SEO: What to Index, Schema, Catalogs and Protected Content”

LifterLMS SEO is mostly about one fact: most of what you sell is hidden from search engines on purpose. Googlebot is a logged-out visitor, so it sees your course sales pages, your catalog and your blog, and almost nothing inside a course. Your rankings come from the pages you choose to make public, not from the lessons.

This guide is for course owners and the developers who build their sites. It covers what Google can actually crawl on a LifterLMS site, which page types to index or keep out, how to turn course pages, catalogs and free lessons into landing pages, and how to add course structured data. Everything about LifterLMS behaviour below was checked against the 10.x plugin source.

What Google can and cannot see on a LifterLMS site

Start by understanding how LifterLMS treats a visitor who is not enrolled, because that is exactly how a search crawler is treated.

  • Course and membership pages are public. They are registered as public post types, included in WordPress search, and they act as the sales page. What a non-enrolled visitor sees depends on the Sales Page Content setting, covered below.
  • Lessons redirect. When someone who is not enrolled opens a lesson, LifterLMS adds a notice and sends them to the parent course with a temporary (302) redirect. Google therefore never sees paid lesson content, only the course page.
  • Quizzes are closed too. A logged-out visitor who opens a quiz URL is redirected to the Student Dashboard login, and a logged-in visitor who is not enrolled goes back to the course.
  • Free lessons are the exception. A lesson with the Free Lesson box ticked lets guests view the content without registering, so it is crawlable like any other page.
  • Some post types are removed from the WordPress sitemap. LifterLMS filters wp-sitemap.xml to drop lessons, quizzes, certificate templates and earned certificates.

That last point catches people out. The filter only affects the sitemap built into WordPress core. If you use Yoast SEO, Rank Math or a similar plugin, it generates its own sitemap, and lessons and quizzes may appear there unless you exclude them in that plugin's settings. A sitemap full of URLs that redirect is a waste of crawl budget and shows up as noise in Search Console.

Which LifterLMS pages to index and which to keep out

Use this as a starting point and adjust to your catalogue.

Page typeIndex?Why
Course pagesYesYour main commercial landing pages.
Membership pagesYesLanding pages for subscriptions and bundles.
Course Catalog and Memberships CatalogYesHub pages that link to every course and can rank for broad terms.
Course category and track archivesYes, if they have real contentGood for topic clusters once you add an introduction; thin otherwise.
Course tag and difficulty archivesUsually noRarely add unique value and often duplicate categories.
Free lessonsYes, selectivelyReal teaching content that can rank and convert.
Paid lessons and quizzesNoCrawlers are redirected, so they cannot rank anyway; keep them out of sitemaps.
Student Dashboard, Checkout, account pagesNoUtility pages with no search value.
Certificate templates and earned certificatesNoPersonal records, not landing pages.

Earned certificates deserve a note. Students can turn on sharing for a certificate so it can be viewed publicly. That is useful for the student, but you do not want hundreds of near-identical certificate pages in the index, so keep them out of your SEO plugin's sitemap and mark them noindex.

Turning course pages into landing pages

For most course businesses the course page is the page that has to rank. LifterLMS gives you a Sales Page Content setting on each course and membership with four options:

  • Display default course content: visitors see the normal course page, including the description and syllabus.
  • Show custom content: visitors who are not enrolled see a separate sales-page body you write, while enrolled students see the course.
  • Redirect to WordPress Page and Redirect to custom URL: visitors are sent elsewhere.

For SEO, the first two are usually best because the course URL itself holds the content Google indexes. The redirect options move the ranking page somewhere else. That can be fine if you deliberately built a sales page with a page builder, but then the course URL should not be in your sitemap, and every internal link should point to the sales page, not the course.

Whichever you choose, the page Google sees should answer the questions a buyer types into search: who the course is for, what they will be able to do, what is included, how long it takes, and what it costs. The syllabus helps here because lesson titles are visible to crawlers even though the lessons themselves are not. Write lesson titles that describe the skill, not "Lesson 4". Our guide to writing a LifterLMS course sales page covers the copy itself.

The Course Catalog page (set under LifterLMS > Settings > Courses, with Courses per page and Catalog Sorting) and the Memberships Catalog are natural hub pages. Give them an introduction above the course grid, a clear H1 and links to your most important categories. A bare grid of tiles is thin content.

Each course and membership also has a Visibility setting with four values: Catalog & Search, Catalog only, Search only and Hidden. These control the catalog and your site's own search, not Google. A hidden course is still reachable by its URL and can still be indexed if anything links to it. If a course is hidden because it is a private client course or an old version, add a noindex (example below).

URL structure is set under Settings > Permalinks in the LifterLMS Permalinks section, where you can change the course, lesson, quiz, archive and taxonomy bases. Choose these before launch. Changing them later changes every URL, so you need 301 redirects from the old paths. If you are seeing broken links after a change, see fixing LifterLMS course and lesson 404 errors.

Course categories and tracks can become strong topic pages once you add a written introduction to each term and link them from your navigation. Tags and difficulty levels are better treated as filters.

Free lessons as search content

Because a free lesson is public, it is the one piece of course content that can rank on its own. Use this deliberately. A good free lesson answers one specific question completely, shows the quality of the course, and ends with a clear path into the paid course or a free signup.

Two cautions. First, only ticking Free Lesson on an introduction video with two sentences of text will not rank; give it a written version or transcript. Second, the free lesson URL sits under your lesson base, so if your SEO plugin excludes all lessons from its sitemap, add free lessons back individually or link them prominently from the course page and your blog so they are discovered.

If you also want to capture emails from free lessons, our article on building a course email funnel with LifterLMS shows how the free lesson fits into a sequence.

Course schema and structured data

LifterLMS core does not output JSON-LD structured data. Your SEO plugin may add generic WebPage or Article markup, and some offer a Course schema type you can assign to the course post type.

Know what Google actually uses. Its Course list structured data documentation requires name and description on each Course, recommends provider, and only shows the course carousel when at least three courses are marked up together with ItemList markup on a summary or all-in-one page. The separate Course Info rich result (with prices, ratings and course instances) was one of the features Google said in June 2025 it was phasing out, so do not build your plan around it. Other search engines and AI tools still read schema, so clean markup is worth having, but it will not rescue a weak page.

If your SEO plugin does not offer a Course type, a small snippet can add the minimum markup to single course pages. Remove it if your SEO plugin later adds its own, so you do not output two Course objects.

<?php
// Output minimal Course schema on single LifterLMS course pages.
add_action( 'wp_head', 'llmsx_course_schema' );
function llmsx_course_schema() {
	if ( ! is_singular( 'course' ) ) {
		return;
	}
	$course = llms_get_post( get_queried_object_id() );
	if ( ! $course ) {
		return;
	}
	$data = array(
		'@context'    => 'https://schema.org',
		'@type'       => 'Course',
		'name'        => wp_strip_all_tags( $course->get( 'title' ) ),
		'description' => wp_trim_words( wp_strip_all_tags( get_post_field( 'post_content', $course->get( 'id' ) ) ), 40 ),
		'url'         => get_permalink( $course->get( 'id' ) ),
		'provider'    => array(
			'@type' => 'Organization',
			'name'  => get_bloginfo( 'name' ),
			'sameAs'=> home_url( '/' ),
		),
	);
	echo '<script type="application/ld+json">' . wp_json_encode( $data ) . '</script>' . "\n";
}

// Noindex courses and memberships whose Visibility is set to Hidden.
add_filter( 'wp_robots', 'llmsx_noindex_hidden_products' );
function llmsx_noindex_hidden_products( $robots ) {
	if ( ! is_singular( array( 'course', 'llms_membership' ) ) ) {
		return $robots;
	}
	$product = new LLMS_Product( get_queried_object_id() );
	if ( 'hidden' === $product->get_catalog_visibility() ) {
		$robots['noindex'] = true;
		$robots['follow']  = true;
	}
	return $robots;
}

The description is taken from the first 40 words of the course description, so make that opening sentence a clear summary of the course. The wp_robots filter works with WordPress core's robots tag; some SEO plugins print their own robots tag instead, in which case set noindex in that plugin's per-post settings. Test with Google's Rich Results Test and the URL Inspection tool after deploying.

Your blog does most of the ranking

A course page targets a commercial query such as "online bookkeeping course for freelancers". Most searches in your niche are informational: how to do a task, what something means, which tool to use. Those are answered by articles, and articles are where a course site gets most of its organic traffic.

A workable structure:

  1. List the problems your course solves and the questions a beginner asks before buying.
  2. Write one thorough article per question, published as ordinary WordPress posts.
  3. Link each article to the most relevant course page and, where it fits, a free lesson.
  4. Link the course page back to two or three of the best articles as further reading.
  5. Group articles under the same categories you use for courses so the topic clusters are obvious.

Avoid putting blog posts behind a membership if you want them to rank. If you use Restrict site by membership level under LifterLMS > Settings > Memberships, the whole site is locked to one membership and crawlers will see almost nothing; that setting is for private portals, not for public course businesses.

Speed matters too, mainly through Core Web Vitals on your course and catalog pages. See how to speed up a LifterLMS site.

Common LifterLMS SEO mistakes

  • Lessons in the SEO plugin sitemap. They redirect to the course, so Search Console fills with "Page with redirect" entries.
  • Thin catalog and archive pages. A grid of tiles with no text rarely ranks.
  • Two URLs for one offer. A course page and a separate builder sales page both indexed, competing with each other. Pick one.
  • Changing permalink bases after launch without redirects.
  • Treating Hidden as private. Hidden only removes a course from the catalog and site search.
  • Locking the blog behind a membership and then wondering why traffic is flat.
  • Duplicate schema from a theme, an SEO plugin and custom code at the same time.

Frequently asked questions

Can Google index my LifterLMS lessons?

Not paid ones. A visitor who is not enrolled, including a crawler, is redirected from the lesson to the course page. Lessons marked as free lessons are public and can be indexed.

Does LifterLMS add course schema automatically?

No. The core plugin does not output JSON-LD. Use your SEO plugin's schema settings or a small custom snippet like the one above.

Should I noindex the course catalog?

No. The catalog is a useful hub page. Give it an introduction and keep it indexed. Noindex utility pages such as the Student Dashboard and Checkout instead.

Does the Hidden visibility setting stop Google indexing a course?

No. It only hides the course from the catalog and on-site search. Add a noindex if the course should not appear in Google.

Next steps

Run a quick audit: open your SEO plugin's sitemap and remove lessons, quizzes and certificates; check each course's Sales Page Content setting; add introductions to the catalog and your main categories; and decide which free lessons deserve to rank. Then plan five to ten articles that link into your best-selling course.

If you want this done properly, including schema, redirects and template changes, our LifterLMS optimization service covers technical SEO and performance together. For anything that needs custom templates, see LifterLMS customization, or contact us with your site URL.

Add LifterLMS Expert to your preferred sources

Add lifterlmsexpert as a preferred source on Google, or open this article in your AI assistant to use it as a source.

  • Add as a preferred source on Google
Free consultation

Prefer expert help over DIY?

Skip the trial and error. Get specialist LifterLMS help and ship faster.

Talk to a LifterLMS Expert Explore our services

Replies within one business day