Skip to content
TubePress — free, self-hosted & actively maintained
SEO & growth

SEO

Meta tags, canonical URLs, structured data, sitemaps, robots and indexing controls.

TubePress ships with a complete SEO layer that is live the moment you install — there is no plugin to enable and no theme code to add. Clean URLs, page titles, meta descriptions, Open Graph and Twitter cards, canonical links, schema.org structured data, video sitemaps and multilingual hreflang are all generated for you from your content and a handful of settings.

This page explains what you get automatically and which controls you can adjust under /admin/settings.

SEO out of the box

The SEO manager boots with the core application, so every front-end page is optimised by default. No plugin Active on install

  • Human-readable URLs for videos, categories, tags, performers, channels and pages.
  • Configurable title and meta description patterns per entity type.
  • Open Graph and Twitter Card tags, with automatic image selection.
  • One canonical URL per page and hreflang alternates for every enabled language.
  • schema.org JSON-LD for videos, breadcrumbs and the site search box.
  • Gzip-compressed video sitemaps plus a dynamic /robots.txt.
  • Search-engine verification meta tags, a GA4 field, and custom head/body code.
Sensible defaults. On first run every SEO setting is seeded with a working default, so a fresh site is already indexable. Tune only what you need.

Titles, meta & Open Graph

Each entity type has its own title and description pattern built from variables. You set them once and they apply across the whole catalogue.

Video title:    {title} {sep} {site_name}
Category title: {name} {sep} {site_name}
Video meta:     Watch {title} online. {description_short}

Useful variables include {title}, {name}, {site_name}, {sep} (the title separator), {count} and {type}. Descriptions are stripped of HTML and capped at roughly 160 characters. Individual pages can override the pattern with their own meta title and meta description fields in the page editor.

For social sharing, the og:image is resolved in order: a page-specific image first, then — when the CTR ranking plugin is active — the thumbnail of the highest-engagement video on a listing, and finally your uploaded default. Twitter cards default to summary_large_image, and you can add a Twitter handle, a Facebook App ID and og:locale:alternate tags for your other languages.

Canonical URLs & duplicate content

Every page emits exactly one <link rel="canonical">. Query strings and fragments are stripped from the canonical, and trailing slashes are normalised by the router, so /category/x, /category/x/ and /category/x?sort=newest all resolve to a single indexable address.

If you run more than one content type, TubePress enforces one canonical URL per typed entity: a request that arrives under the wrong video-type prefix is 301-redirected to the correct one, so the same video can never be indexed at two URLs. Language versions are tied together with hreflang alternates rather than competing as duplicates.

Sort and page parameters. The default robots.txt already disallows ?sort= and ?page= crawling, reinforcing the canonical and saving crawl budget.

Structured data

TubePress outputs schema.org JSON-LD so search engines can render rich results:

  • VideoObject on watch pages — name, description, thumbnail, upload date, duration, embed and content URLs, and a view-count interaction statistic.
  • BreadcrumbList to describe where a page sits in the site hierarchy.
  • WebSite + SearchAction on the homepage, which can enable a sitelinks search box for your brand.

Sitemaps

A sitemap index is served at /sitemap.xml. It is generated dynamically from a few fast COUNT/MAX queries and references the child sitemaps, which are written to disk as gzip-compressed files and regenerated whenever your content changes.

SitemapContents
Videosvideo:video + image:image tags: thumbnail, title, description, player and content URLs, duration, view count, publication date
Categories / tags / performers / channelsEntity URLs with bidirectional hreflang alternates (including x-default)
PagesStatic CMS pages and per-type homepages, with hreflang

Each child file holds up to 25,000 URLs (configurable between 1,000 and 50,000), and you can switch any entity type, the video/image tags or the hreflang block on or off. Sitemap responses carry an X-Robots-Tag: noindex header so the files themselves stay out of results.

Robots & indexing

The /robots.txt file is dynamic: it advertises your sitemap, disallows administrative and faceted paths, and applies a crawl-delay to aggressive SEO bots. Indexable pages receive a permissive default robots meta (max-image-preview:large, max-video-preview:-1, max-snippet:-1).

You can apply noindex selectively — to tag, category, performer or channel listings, to paginated pages, or to search results (on by default) — without touching the rest of the site. There is also a single master switch for staging environments.

Keep staging out of search. Enabling seo_noindex_entire_site adds noindex, nofollow to every page and makes robots.txt disallow everything. It is the right switch for a pre-launch site — remember to turn it off before you go live.

Multilingual SEO

When you enable more than one language, TubePress links the translations together with rel="alternate" hreflang tags in both the page <head> and the entity sitemaps, plus an x-default pointing at your primary language. The default language stays at the root while other languages live under a short /{code}/ prefix. See Internationalization for the full language workflow.

Performance

SEO output is built to scale. Sitemaps are streamed with batched database queries and stored gzip-compressed, the index is computed on demand from count queries, and robots.txt is cached for a day. The CTR-based Open Graph image is only computed when the ranking plugin is active, so there is no overhead if you do not use it. The result is correct, fast metadata even on catalogues with millions of videos.

Next steps

Still stuck?

Open a ticket from your dashboard and our team will help you out.

Try the live demo → Download TubePress →