Fix the course index pages
For: the webmaster of londoncollegeofstyle.com
Source: GEO Technical Site Audit – LCS (5 August 2026), Tier 1 recommendation 2 of 6
Audit findings: 3.5 Content clarity (score 6 / 10) and 3.4 Metadata (score 6 / 10)
Two changes to two pages: https://londoncollegeofstyle.com/london-courses/ and https://londoncollegeofstyle.com/all-courses/.
- Render the course list as static HTML that is present in the page source.
- Replace the placeholder meta descriptions.
Why this is Tier 1
These are the two pages an AI assistant reaches for when someone asks "what courses does London College of Style offer?". Here is what the audit crawl actually received from them.
| /london-courses/ | /all-courses/ | |
|---|---|---|
| Visible text delivered | 1,708 characters | 1,706 characters |
| Course names in HTML | none | none |
| Prices in HTML | none | none |
| Meta description | London Courses | Online Courses |
The ~1,700 characters are almost entirely navigation plus filter dropdown labels: Category: London / Online; Type: Colour analysis, Fashion styling, Interior design, Personal styling, Fashion Sustainability, Start & Grow, Fashion & Personal Styling; Level: Advanced Diploma, Diploma. The page a model reaches for the portfolio contains the taxonomy, not the portfolio.
The consequence shows up elsewhere in the audit: none of the six course detail URLs were discovered during the crawl at all, because nothing static links to them. And none of the collected evidence contained a single course price, module list, week count, or the 14-day cancellation terms – the exact facts buyers ask about.
The meta descriptions compound it. London Courses tells a retrieval system nothing. It cannot infer from that string that the page lists accredited advanced diplomas in personal styling, fashion styling and colour analysis taught in Bloomsbury.
Render the courses as static HTML
Every course on each index page must have its name, one-line description, level, format, duration and price present in the HTML that the server returns – readable without executing JavaScript and without interacting with any filter.
The requirement
Keep the filters. They are good UX. The change is that the filters should hide and show items that are already in the DOM, rather than fetching them after load.
How to check what you have now
curl -s https://londoncollegeofstyle.com/all-courses/ | grep -i "colour analysis"
If that returns nothing, or returns only the dropdown <option> label, the courses are not in the served HTML. Repeat for /london-courses/.
Do the same check after your fix – that command finding the course name inside a card, not an option tag, is the pass condition.
Route A – the courses are rendered client-side by a filter script
Most likely cause. The fix is to output the full course list server-side on page load, then let the filter script operate on the rendered list.
- Find the template or shortcode driving the index (a WP_Query loop over the course post type, or an AJAX/REST endpoint the filter calls).
- Move that query so it runs during page render and outputs all courses into the markup.
- Point the filter JavaScript at the rendered elements – toggle a class or
hiddenattribute – instead of requesting data. - Confirm no course card is injected after
DOMContentLoaded.
Route B – the index is a page-builder layout
If the page is built in Elementor/WPBakery/similar with a dynamic-loop widget, check the widget's own settings first: many offer a "load all / no AJAX" or "server-side render" mode. If yours does, enabling it plus disabling infinite scroll or "load more" may be the whole fix.
If it does not, add a static block containing the full portfolio beneath the filtered grid. Less elegant, but it puts the facts in the HTML today.
Fields required per course
Use plain, labelled text. No text baked into images, no facts that exist only in a tooltip.
| Field | Example |
|---|---|
| Course name | Personal Styling Advanced Diploma – Flagship London |
| Level | Advanced Diploma |
| Format | London campus plus online mentoring |
| Duration | One week in person plus six weeks online mentoring |
| Price | £3,245, or three instalments |
| One-line description | Immersive in-person training in Bloomsbury covering wardrobe edits, personal shopping and colour analysis, with business launch support. |
| Link | Anchor to the course detail page, with the course name as the link text |
The six courses
Confirm every price against the live course page before publishing.
| Course | Level | Price | Links to |
|---|---|---|---|
| Personal Styling Female Clients Advanced Diploma | Advanced Diploma | £1,215 | /courses/personal-styling-female-clients-advanced-diploma-online/ |
| Colour Analysis for Creatives Advanced Diploma | Advanced Diploma | £1,530 | /courses/colour-analysis-course-online/ |
| Fashion Stylist Business Training: Business Launch & Development | Business launch programme | £645 | /courses/start-and-grow-business-launch/ |
| Interior Design Residential Diploma | Diploma (foundation) | £1,170 | /courses/interior-design-foundation-online-diploma/ |
| Course | Level | Price | Links to |
|---|---|---|---|
| Personal Styling Advanced Diploma – Flagship London | Advanced Diploma | £3,245 | /courses/personal-styling-course-london/ |
| Fashion & Personal Styling Advanced Diploma – Flagship London | Advanced Diploma | £6,450 | /courses/fashion-personal-styling-advanced-diploma-london/ |
The anchor links are the second half of the job. The audit crawl never reached any of the six course detail pages. Static anchors from these two index pages are what makes them discoverable. Use the course name as the link text – not "Find out more".
Add a portfolio sentence above the grid
Two or three sentences of real prose above the filters, before any course card. Something an assistant can quote as a summary of what LCS teaches. For /all-courses/, for example: what is taught online, at what levels, that study is worldwide and self-paced, that instalments are available, that courses are accredited. Match the tone of the homepage copy, which the audit rated as the site's strongest.
Replace the meta descriptions
Metadata is managed in Rank Math. For each page: edit the page in WordPress, open the Rank Math panel, click Edit Snippet, replace the Description field, update.
/london-courses/
Replace London Courses with:
Accredited personal styling, fashion & personal styling and colour analysis advanced
diplomas taught in person at the London College of Style campus in Bloomsbury. Study
alongside industry mentors, with pay-in-three instalment options.
/all-courses/
Replace Online Courses with:
Study personal styling, colour analysis, interior design and stylist business launch
diplomas online with the London College of Style. Accredited creative training at
diploma and advanced diploma level, studied worldwide, with instalment payment options.
Keep both between 150 and 160 characters after any edits. Adjust the accreditation wording to whatever LCS confirms as correct – the site currently says BAC accredited while the brand knowledge base says ACE-accredited in one place, and this needs settling once for the whole site.
While you are in Rank Math, confirm the page titles use the single form | London College of Style. The site currently mixes that with London College Of Style (capital O) across templates.
Do not write guaranteed jobs, guaranteed income, or a promised number of clients into either description. These are explicit brand anti-claims.
Purge and verify
Purge the CDN and page cache for both URLs, then:
- Source check.
curl -s https://londoncollegeofstyle.com/all-courses/ | grep -c "1,215"– should return1or more. Repeat with3,245on/london-courses/. - JavaScript off. Load both pages in a browser with JavaScript disabled. Every course should be visible with its name, level, format, duration and price.
- Link check. Every course anchor resolves
200and lands on the right detail page. - Character count. Both pages should now deliver several thousand characters of visible text, not ~1,700. Any word-count checker on the rendered page will show this.
- Meta check. View source and confirm the new
<meta name="description">on each page. Confirm it is not stillLondon Courses/Online Courses. - Price check. Every price on the index matches the live course detail page, to the pound.
- Re-request indexing for both URLs in Google Search Console.
Checklist
- [ ] Prices and accreditation wording confirmed with LCS
- [ ] All four online courses render in the static HTML of
/all-courses/ - [ ] Both London courses render in the static HTML of
/london-courses/ - [ ] Each course shows name, level, format, duration and price as labelled text
- [ ] Each course links to its detail page with the course name as anchor text
- [ ] Filters now show/hide rendered items rather than fetching them
- [ ] Portfolio intro paragraph added above the grid on both pages
- [ ]
/london-courses/meta description replaced in Rank Math - [ ]
/all-courses/meta description replaced in Rank Math - [ ] Title suffix standardised to
| London College of Style - [ ] Cache purged, both pages verified with JavaScript disabled
- [ ] Both URLs resubmitted in Google Search Console
What comes next
- Recommendation 5 – confirm all six course URLs are in
sitemap_index.xml. The static links you have just added handle the crawl-path half of that item; the sitemap half is a separate check. - Recommendation 4 – add
CourseandOfferschema to each course detail page with GBP pricing and the pay-in-three option. The facts you have just put on the index pages are the same facts that go into the schema, so doing these back to back avoids stating the portfolio twice from two sources. - Recommendation 6 – add a labelled facts block to every course detail page: price, duration, modules, contact hours, format, accreditation and the 14-day cancellation terms.