Skip to content

Tsf Seo Framework

TSF Outputs WebSite + Organization + BreadcrumbList by Default

From legacy section: Schema Deployment

Pattern: Deployed custom schema via mu-plugin but TSF was also outputting duplicate WebSite, Organization, and BreadcrumbList blocks with different @id patterns. Created duplicate entities on every page. Rule: When deploying custom schema on a TSF site, disable TSF's JSON-LD output: wp option patch update autodescription-site-settings ld_json_enabled 0 && ld_json_searchbox 0 && ld_json_breadcrumbs 0. Do this BEFORE validating, not after. Date: 2026-04-16


TSF auto-excludes noindex pages from sitemap.xml — flag via post_meta, flush transient

From legacy section: SEO NEO / Workbook

Pattern: During the audit-noindex fix, after stamping _genesis_noindex=1 on 60 audit pages via WP-CLI, the sitemap.xml at https://evolvebusiness.com/sitemap.xml still showed all 60 audit URLs. Reason: TSF caches the rendered sitemap as a wp_options transient (cache_sitemap=1 setting) and post_meta updates don't trigger TSF's cache invalidation hooks. Manually deleting the transients made the next sitemap request regenerate from scratch — and the new sitemap automatically excluded all noindex pages with no extra config (TSF respects _genesis_noindex in its sitemap query). Rule: To remove a page from TSF's sitemap.xml, set _genesis_noindex=1 post_meta — that's the entire config (TSF's sitemap query filters out noindex posts automatically). Then flush TSF's sitemap cache so the change takes effect immediately:

// wp-options entries that cache TSF's sitemap output
$patterns = ['_transient_tsf_sitemap_%', '_transient_timeout_tsf_sitemap_%'];
foreach ($patterns as $pat) {
    $rows = $wpdb->get_col($wpdb->prepare(
        "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", $pat
    ));
    foreach ($rows as $name) delete_option($name);
}
// Defense in depth — fire TSF's own purge action if registered
do_action('tsf_sitemap_invalidated');
do_action('the_seo_framework_sitemap_purge');
Without the flush, the cache TTL determines when the sitemap actually updates (typically 24h). For active deploys where you want immediate Google re-crawl signal, always flush. Verification: curl https://<site>/sitemap.xml | grep -c "<loc>" — should match the count of indexable published posts/pages, not include any with noindex meta. Date: 2026-04-30