Skip to main content
Platform Deep Dive

The SEO and Content Infrastructure Behind 400+ Blog Articles and 19,000 Programmatic Pages

How Tenders-SA built an SEO and content infrastructure that powers 400+ blog articles, 19,000+ programmatic pages for province-category combinations, AI-generated structured data, multi-format sitemaps, and an IndexNow integration — all while keeping content authoritative and valuable for South African procurement professionals.

The SEO and Content Infrastructure Behind 400+ Blog Articles and 19,000 Programmatic Pages

Tenders-SA serves over 19,000 unique URLs: tender detail pages, province-category combinations, organisation profiles, blog articles, tool pages, intelligence articles, and more. Getting these pages to rank well in search engines — and to display useful rich results when they do — requires an SEO infrastructure that goes far beyond meta tags.

This article covers the key architectural decisions behind the content system: the JSON-based blog engine, the programmatic SEO page generator, the structured data system, and the AI-powered SEO metadata pipeline.

The stakes here are not abstract for the businesses that rely on this content. A construction contractor in Polokwane searching for guidance on CIDB grading, or a cleaning company in Nelspruit trying to understand B-BBEE set-aside rules, is far more likely to find that guidance through a search engine than by browsing the platform directly. If the underlying pages are thin, poorly structured, or invisible to crawlers, that supplier simply never discovers the tools that could help them win their next contract. SEO infrastructure, in that sense, is not a marketing afterthought bolted onto the platform — it is the on-ramp that connects South African SMMEs to procurement guidance and tooling they didn't know existed.

The Blog Content System

The blog uses a JSON-based content system instead of MDX. Each article is a JSON file in /content/blog-json/ containing metadata and structured content blocks:

1// Each blog post is a strongly-typed JSON structure
2export type ContentBlock =
3    | HeadingBlock    // { type: 'heading', level: 1-6, text, id? }
4    | ParagraphBlock  // { type: 'paragraph', content, className? }
5    | CodeBlock       // { type: 'code', language, code, title?, showLineNumbers? }
6    | ListBlock       // { type: 'list', ordered, items: ListItem[] }
7    | ImageBlock      // { type: 'image', src, alt, caption?, width?, height? }
8    | VideoBlock      // { type: 'video', platform, videoId }
9    | BlockquoteBlock // { type: 'blockquote', content, citation? }
10    | TableBlock      // { type: 'table', headers, rows, caption? }
11    | DividerBlock;   // { type: 'divider' }
12
13export interface BlogPostJSON {
14    slug: string;
15    metadata: BlogPostMetadata;  // title, excerpt, author, category, tags, SEO, howTo, FAQ
16// ... (truncated)
TYPESCRIPT

This approach was chosen over MDX for several reasons: type safety (every content block is validated against TypeScript interfaces), portability (JSON is language-agnostic — we could switch rendering frameworks without rewriting content), AI-generability (the structured format makes it straightforward for AI to generate valid articles), and performance (JSON parsing is faster than MDX compilation, and we can cache the parsed result aggressively).

A build script (scripts/generate-blog-manifest.js) reads all JSON files and generates /content/blog-manifest.json — a master index that drives blog listing pages, RSS feeds, and sitemap generation.

Programmatic SEO Pages

Beyond the 400+ blog articles, we generate programmatic SEO pages for every province-category combination: /sa-tenders/gauteng/construction, /sa-tenders/western-cape/healthcare, etc. These pages are database-backed and render at runtime using Incremental Static Regeneration with a 2-hour refresh window.

Each page includes: a listing of active tenders for that province and category, procurement statistics (number of active tenders, awarded contracts, award rate), an AI-generated description specific to the province-category combination, cross-links to related categories and provinces, and structured data (CollectionPage + ItemList + BreadcrumbList) for rich search results.

We also maintain dedicated landing pages for high-value SEO terms: /government-tenders-south-africa, /cleaning-tenders-south-africa, /construction-tenders-south-africa, /security-tenders-south-africa, /tender-winners-south-africa, /ai-tender-matching-south-africa, and more.

The Structured Data System

Every page on the platform emits structured data appropriate to its content type. The system is built around reusable generators in src/lib/seo/:

  • Tender pages: BreadcrumbList, WebPage with paywall schema (isAccessibleForFree: false with CSS selectors for gated content), and GovernmentService or BusinessAudience
  • Blog pages: Article with author, published date, and featured image; FAQPage for articles with FAQ sections
  • Listing pages: CollectionPage + ItemList with per-item metadata
  • Organisation pages: Organization with contact info, identifiers, and award statistics
  • Pricing page: Service types with ZAR pricing
  • Tool pages: SoftwareApplication with feature descriptions and pricing
  • Site identity: Organization + WebSite with SearchAction on every page

The Tender Radar pages are particularly structured-data rich: they emit Organization, WebSite + SearchAction, BreadcrumbList, WebPage with speakable selectors, a Service schema describing the company archetype, and an ItemList of live matching tenders.

Meta Description Generation

With 19,000+ pages, manually writing meta descriptions is impossible. We built an AI-powered fallback generator that builds meaningful descriptions from page content, with word-boundary-aware truncation at 160 characters. Category pages mention specific opportunity types; province pages mention relevant sectors; organisation pages lead with the active tender count; forensic pages use procurement risk and compliance keywords.

The fallback description length was raised to 155 characters (up from 100) in July 2026, ensuring every page has a fuller search snippet. The terminal fallback was also fixed — previously an empty string, it now builds a meaningful description from the tender reference, organisation, and province.

Sitemap Architecture

We maintain 7+ sitemap types served as dynamic routes: /sitemap.xml (index), /sitemap-tenders.xml, /sitemap-blogs.xml, /sitemap-categories.xml, /sitemap-provinces.xml, /sitemap-province-categories.xml, /sitemap-static.xml (static pages, tools, Tender Radar), /sitemap-docs.xml, /sitemap-awarded-tenders, /sitemap-closed-tenders, and /sitemap-company-intelligence.

For timely notification, we use IndexNow — pushing URL changes to search engines as they happen. When a new tender is ingested or an article is published, the IndexNow API is called immediately. This ensures new content appears in search results within hours rather than days.

Structured data also earns its keep well beyond the search results page. A well-formed Article schema on a blog post, or an ItemList on a province-category listing, is what lets that page appear as a rich result rather than a plain blue link — with an author name, a publish date, or a count of listed items visible directly in the search results. For a blog covering technical procurement topics like CIDB grading or B-BBEE consolidation, that extra context in the search snippet often makes the difference between a click and a scroll past, because it signals to the searcher that the page is a substantive, attributed piece of content rather than a thin aggregator page.

AI-Ready Content Delivery

AI platforms like ChatGPT, Gemini, Claude, and Perplexity need clean, well-structured content to cite accurately. We serve markdown versions of 70+ public routes at /_ai/* mirror paths, with JSON feeds, JSON sitemaps, and llms.txt files for AI platform discovery. Well-behaved AI bots get 60 requests per minute; abusive scrapers are limited to 10. A daily bandwidth cap monitors AI traffic and alerts if thresholds are exceeded.

Content Generation and Quality

Blog content is generated through a structured pipeline. Topics are organized in clusters covering: basics (starter guides, compliance fundamentals), proposals (winning strategies, document preparation), sector-specific (construction, IT, healthcare, cleaning, security), and provincial (each province's procurement landscape). Each article is authored by one of 19 subject-matter experts (from the AUTHORS.md registry), reviewed, and published through an admin workflow.

Quality controls include: a novelty gate that blocks near-duplicate articles from being published, tag capping at 3 tags to prevent spamming, manual SEO metadata review for feature articles, and automated audit scripts (npm run blog:audit) that check for common issues.

Why Programmatic Pages Need Real Data Behind Them

Programmatic SEO has a well-earned bad reputation in the wider web when it is done by templating a page shell and stuffing keywords into it with no genuine content behind them. Search engines have become increasingly good at identifying and demoting exactly this pattern, and rightly so — a page generated purely to rank, with no real information for the visitor who lands on it, is a poor experience for everyone except the site operator. The reason the province-category pages on Tenders-SA can exist at the scale they do without falling into that trap is that each one is backed by genuinely live, queryable data: real active tenders in that specific province and category, real procurement statistics computed from the underlying award database, and cross-links that route a visitor to genuinely related content rather than an arbitrary internal-linking scheme. The AI-generated description on each page is there to add context, not to manufacture the appearance of substance where none exists.

This is also why the platform actively excludes thin pages from search indexing rather than publishing everything indiscriminately. A province-category combination with only one or two listings genuinely does not have enough content to be a useful landing page, and indexing it anyway would dilute the overall quality signal search engines associate with the rest of the site. Better to keep a handful of low-value combinations out of the sitemap than to have that low value drag down how search engines evaluate every other page on the domain — a lesson that applies just as much to individual blog posts as it does to programmatic listing pages.

Tags

SEOContent StrategyStructured DataProgrammatic SEOBlog SystemNext.jsArchitectureJSON-LD
Relevant Tender Opportunities

Based on this article's topics, here are some current tenders that might interest you

Information and Communication

Tenders are hereby invited from capable and experienced service providers for the SUPPLY, DELIVERY, INSTALLATION, CONFIGURATION AND SUPPORT FOR ENTERPRISE COMPUTER SERVERS 1. Only tenderers who have provided the following mandatory information and documents to be used to evaluate the bidder's responsiveness will be considered for further evaluation on functionality: 1.1 Only service providers who are registered on the Central Supplier Database (CSD) will be considered and the copy of the full CSD report not older than three months should be submitted. 1.2 Form of offer must be firm, VAT and other tax-inclusive and valid at least ninety (90) days from the closing date. 1.3 Service providers are required to fully complete the attached MBD forms and be submitted together with their written tenders. 1.4 No tender shall be considered for the persons who are in the service of the state, 1.5 Valid SARS PIN certificate must be attached. 1.6 Attached original Certified copy of company registration documents issued by Companies and Intellectual Property Commission (CIPC). 1.7 Attached original Certified copies of Identity Documents (ID) of all company directors. 1.8 Attach verifiable Municipal Account/s not older than three months for both the tenderer and entity owner/s or director/s. In areas where the municipalities are not issuing municipal accounts, attach valid lease agreements or confirmation of residence or address for both the tenderer and entity owner/s or director/s issued by a relevant authority not older than three months. 1.9 Joint Venture or Consortium Agreement if applicable. 1.10 All tender documents must be duly signed and submitted on the PDF document that has been issued and certified documents must not be older than three months. 1.11 Tenderers are advised not to commit any fraudulent activities, including forgery of documents. All abuses of the Supply Chain Management (SCM) systems including but not limited to forgery of returnable documents, may be reported to the South African Police Service (SAPS) and restricted from doing business with any public institution or organ of the state for a period not exceeding 10 years in line with the Prevention of Fraud and Corrupt Activities Act 12 of 2004. 2. The tender will be evaluated by applying the 80/20 preference point system in terms of the Preferential Procurement Policy of the Ehlanzeni District Municipality. The policy preference point system will be applied as follows: 2.1 The 80 points will be for price; and 2.2 The 20 points will be allocated for the specified goals on a proportional or pro rata basis as follows: POINTS FOR CONTRACTING AN ENTERPRISE OWNED BY HISTORICALLY DISADVANTAGED PERSONS OR INDIVIDUALS HISTORICALLY DISADVANTAGED PERSONS OR INDIVIDUALS POINTS ALLOCATION SOURCE DOCUMENTS REQUIRED TO CLAIM POINTS 100% black person or people owned enterprise 5,00 ? A copy of a Full CSD report not older than 3 months More than 30% woman or women shareholding or owned enterprise 2,00 more than 30% youth shareholding or owned enterprise 2,00 More than 30% people living with disability shareholding or owned enterprise 2,00 ? A copy of a Medical Certificate to confirm disability or stated on the CSD More than 30% military veteran’s shareholding or owned enterprise 2,00 ? Points will be allocated if it is stated on the CSD that the enterprise is owned by persons designated as military veterans POINTS FOR IMPLEMENTING OF RDP PROGRAMMES Enterprises regarded as *EMEs located within the Ehlanzeni District Municipality area of jurisdiction 2,00 ? A copy of a Full CSD report not older than 3 months NB: Points will only be awarded if the CSD physical address is the same as the address for the proof of residence required in 1.7 above. B-BBEE level 1 contribution 5,00 ? Certified Valid BBBEE certificate; or ? Certified Valid EME and SME a Sworn Affidavit; or ? Certified Valid CIPC issued certificate confirming annual turnover and level of Black Ownership TOTAL PREFERENCE POINTS TO BE CLAIMED 20,00 *EME’s are Exempted Micro Enterprise with an annual turnover of R10 million or less. Received bids will be evaluated for responsiveness based on mandatory requirements, functionality and bidders who obtain a minimum of 70 points out of a possible 100 points for further evaluation on the preference point scoring system. Tender documents can be viewed and downloaded at no cost on the Document Sharing and Collaboration Platform or Portal (NEPTUNE): http://edmservices.ehlanzeni.gov.za and National Treasury Portal from Wednesday, 30 September 2026. Further information regarding the downloading and uploading of documents will be explained at the compulsory briefing session. A compulsory briefing session will be held on Wednesday, 7 October 2026 at 10h00, at Ehlanzeni District Municipality Office Complex, DMC, 8 Van Niekerk Street, Sonheuwel Central, Mbombela, 1201. Where tenders should be submitted - Completed tender and other returnable documents must be submitted only in PDF format on the Document Sharing and Collaboration Platform or Portal: http://edmservices.ehlanzeni.gov.za on or before Friday, 16 October 2026 not later than 12h00. Tender Documents received by telegram, fax and post will not be considered. Late bids shall not be accepted. Enquiries: Contact Person - ADMINISTRATION: Mr. S P Khumalo at 013 759 8510 or [email protected] Contact Person – TECHNICAL: Mr. M Srini at 013 759 8500 or [email protected] Visit our website: www.ehlanzeni.gov.za Employer: Acting Municipal Manager: Ms S S Madlopha Ehlanzeni District Municipality P. Box 3333 MBOMBELA 1200

Ehlanzeni District Municipality
Mpumalanga
16 Oct 2026
4d left
Supplies: General

PROCUREMENT OF A DIGITAL PLATFORM FOR IDEA MANAGEMENT AND PUBLIC PARTICIPATION 2028/29, 2029/30, 2030/31

City of Cape Town
Western Cape
20 Nov 2026
39d left
Financial Service Activities, Except Insurance and Pension Funding

SUPPLY, INSTALLATION AND COMMISSIONING OF AN STS ONLINE VENDING SYSTEM AND SMART METERING READY PLATFORM FOR ENDUMENI LOCAL MUNICIPALITY FOR A PERIOD OF THREE (3) YEARS

Endumeni Local Municipality
National
19 Oct 2026
7d left
Other Service Activities

Development of a Digital Induction Platform for uMngeni-uThukela Water

uMngeni-uThukela Water
KwaZulu-Natal
05 Nov 2026
24d left
Services: Professional

Training: PM-PL900T00 Microsoft Power Platform Fundamentals and PM-PL300T00 Microsoft Power BI Data Analyst

Science & Technology
Gauteng
16 Oct 2026
4d left
Other Personal Service Activities

Supply of a comprehensive global online platform that provides data and insights into countries, all sectors, industries and consumer trends and behaviours across all globally researched countries worldwide for a period of three (3) years.

Western Cape Tourism, Trade and Investment Promotion Agency
Western Cape
16 Oct 2026
4d left

Want to see all available tenders?

Browse All Tenders →
AI-Powered Matching
Never Miss a Perfect Tender Again
Our AI analyzes thousands of tenders and finds the ones YOUR company can actually win
✓AI Match Scoring for every tender
✓Instant alerts for 85%+ matches
✓B-BBEE level optimization
✓Document readiness checks

Share this article

The SEO and Content Infrastructure Behind 400+ Blog Articles and 19,000 Programmatic Pages

How Tenders-SA built an SEO and content infrastructure that powers 400+ blog articles, 19,000+ programmatic pages for province-category combinations, AI-generated structured data, multi-format sitemaps, and an IndexNow integration — all while keeping content authoritative and valuable for South African procurement professionals.

https://www.tenders-sa.org/blog/building-seo-content-infrastructure