Jekyll and online course

Four intakes of one course, all still on the site, all in the corpus

A course provider on this platform announces each intake as a post and then moves on. The post stays. So does the one before it, with its price, its start date and its early bird deadline, and the build writes all of them into the published site every time it runs. Nothing here deletes anything, so a crawl of the published site collects every intake you have ever sold as an equally current statement of what the course costs.

Why this pairing is its own job

The Jekyll install guide covers the tag, and the online course guide covers what the assistant has to know. What follows is the part that belongs to neither.

  • Posts accumulate by design. There is no unpublish on a static build: a file in the posts directory becomes a page, and it goes on becoming a page on every build until somebody removes the file from the repository.
  • A course provider changes its price and its dates every intake, which means the accumulated posts are not merely old news. They are contradictory commercial statements about the same product, published by you, on your own domain.
  • Category, tag and pagination pages are generated from those posts, so one old announcement is reachable through several listing documents as well as its own URL, all of them built and all of them listed.
  • The one thing in your favour is a convention. The date is in the file name and in the path, so unlike most stale content this material can be told apart by looking at it, provided the crawl scope is drawn along that line.

What changes about the install here

<script src="https://cdn.askably.xyz/w.js" data-key="pk_live_YOUR_KEY" defer></script>

The tag is the same one on the Jekyll guide. Everything below is about where it goes on a online course site specifically.

The layout you edited is probably not the layout the posts use

A post names its layout in front matter, and that is commonly a post layout rather than the default one. If the post layout does not itself declare the file you edited, every intake announcement on the site is a page without a launcher, which is also every page an old link points at.

Follow the chain. Open one post, read its layout key, open that layout, and see whether it declares a layout of its own. The tag belongs at the top of that chain, and on a site that has been through a theme change the chain is rarely what anybody assumes it is.

Decide the crawl scope before the first index, along the date in the path

The published site contains every intake. The crawl takes whatever it is pointed at, and the corpus keeps what it read until it reads again, so a scope decision taken afterwards costs a re-index rather than an edit.

The useful line is one the platform has already drawn. Posts carry their date in the path, so restricting the crawl to current material is a path decision rather than a judgement about each page. Point it at the pages describing the course as you sell it now, and leave the announcements outside.

Taking a post out of the corpus is two separate jobs

Deleting the file removes the page at the next build. It does not remove the sentences from the material, which is a copy of what was read at index time, so an old price can still be quoted and cited to a URL that now returns your error page.

Do both, in that order, and check by asking about the old price rather than by looking at the site. The site is the easy half and the one that gives a misleading all clear.

Where the answerable material lives

Source material on a Jekyll online course site
The curriculum page, which is the one page anybody actually maintainsModule by module, with the format of each part and a realistic length for it. It is the page that changes when the course changes, which makes it the only description of the course that is safe to answer from. Every other description on the site was written for an intake that has finished.
Intake announcements, which are commercial statements with dates on themEach carries a price, a start date, a deadline and usually a discount that expired. They are perfectly good history, and to anything reading pages they are indistinguishable from current terms, which is the whole of this pairing in one line.
Access terms and the cancellation policy, wherever those are publishedHow long access lasts, what happens when it ends, the cancellation window and how a request is made. This has to be the compliant wording rather than a line lifted from a sales post, because a paraphrase of a cancellation right is a misstatement of it, and sales posts are where the paraphrases live.
The lessons, which cannot be gated on this platform at allA static build serves what it wrote to anybody who requests the URL. There is no membership layer to put a lesson behind, so a provider running lessons here is either publishing them or keeping them somewhere else entirely. Whichever it is, decide it rather than relying on nothing linking to a page.

The first thing to get right

Do this first
Search the built site for a price you no longer charge and count the pages that come back.

It turns an abstract worry into a number, and the number is usually higher than anybody expects once the category and pagination pages are counted. It also tells you which shape of repair you need, because deleting three posts is an afternoon and restricting the crawl to the pages you maintain is ten minutes.

The failure that belongs to this combination

Last year's price, quoted with a citation to a real page

Somebody asks what the course costs. The answer gives a figure that was true for the spring intake and links the announcement it came from, and the whole thing looks checkable, because it is. The page is live, the number is on it, and the post never said it was going to expire.

The visitor either buys at the number they were shown and argues about it afterwards, or does not buy because the figure is higher than the one you charge now. Both outcomes come from your own material, published deliberately at the time, and neither is a failure of the assistant.

Test it the way a buyer would. Ask about price, ask about start dates, and read the citations rather than the answers. If a citation points at a post with an old date in its path, the corpus needs cutting down before anything else is worth tuning.

Before you go live

  • The origin the page is served from has to be on the allowlist for that assistant, or nothing renders and the browser console says which origin was refused. An apex domain and its www are two different origins to a browser, so list both, along with any staging or preview host you want it to work on.
  • Open the site as a visitor would, on the pages a online course visitor actually lands on, and ask it something only your own material could answer. A widget that renders is not the same as a widget that has read anything.

Questions

Can we keep the old announcements published and simply leave them out of the material?
Yes, and that is usually the right answer. They are useful to somebody who lands on one from an old link, and they carry a date in the path that explains them. What they must not be is one of several equally weighted sources for what the course costs, and the crawl scope is where that is settled.
We deleted an old post and it is still being quoted. Why?
Because the material is a copy of what was read rather than a live view of the site. Deleting the file removes the page at the next build and changes nothing about what was already indexed. Re-index after that build, then ask the question again.
Should the sales page or the curriculum page be the source for what is included?
The curriculum page, where one exists, because it is the document that gets changed when the course changes. Launch copy is written once and outlives the thing it described, which on this platform means it is still published years later with nothing marking it as historic.

Keep reading

Try it on your own material

Upload a document or point it at your site, paste one line of HTML, then ask it something only your business could answer.