Commit d3406ef
feat: publish new JS course (#1907)
The aim of this PR is to publish the new JS course as described in the
PR description of #1584, and to
unlist the old JS course. The old one should be still accessible for a
grace period.
_Replacing the old JS course with a new one, which is identical to the
Python course, has been previously sanctioned by both Ondra and Michał._
### The Plan
- [x] The `scraping_basics_javascript` root leads to the new JS course.
- [x] The pages of the old JS course move to
`legacy/web-scraping-for-beginners`. It's gonna be a read-only archive.
Must be `noindex` to avoid cannibalization issues.
- [x] The `web-scraping-for-beginners`, i.e. the root of the old JS
course URLs, leads to redirects which take people to corresponding pages
in the new JS course. This lets us use the SEO juice from the old URLs.
- [x] The redirects add `#old-js-course` to the URL. The new JS course
pages contain a component which, if `#old-js-course` is present in the
URL, displays a _commemorative plaque_ about the change and link the old
JS course. This improves UX: "Hey, you have until 1.1.2026 to go through
this course. After that please refer to the newly updated JS course
<link>."
- [ ] At some point in future, we'll nuke the archive of the old JS
course and link Internet Archive instead in the _commemorative plaque_.
_The Plan is a result of a [long discussion between Michał, Aleš, and
me](https://pyvec.slack.com/archives/C03BHBQNNG3/p1756992893312119),
which takes into account both the UX of existing users of the JS course
and SEO._
### Related Work
- Depends on #1889
- Closes #1584
- Closes #1579
- Fixes #947
- Discovered #1900
- Closes #2009 (PoC)
- Contains #2023
- Closes #1550
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Publishes the new JS course, archives the old one with redirects and
an on-page notice, and updates links, content, and Nginx rewrites across
the docs.
>
> - **Academy: New JS course rollout**
> - Publishes `academy/webscraping/scraping_basics_javascript/*` (new
slugs, content, and index) and updates internal references to it.
> - Archives the old JS course under
`academy/webscraping/scraping_basics_legacy/*` with `noindex` and a
legacy notice.
> - Adds `src/components/LegacyJsCourseAdmonition.jsx` and integrates it
into new course pages to show a notice when `?legacy-js-course=` is
present.
> - Updates course metadata (titles/sidebar labels) in
Expert/Anti‑scraping lessons and adds caution notes where content
depends on the legacy course.
> - Updates homepage card and other references to point to
`'/academy/scraping-basics-javascript'`.
> - **Routing/Redirects (Nginx)**
> - Redirects old JS course paths
`^/academy/web-scraping-for-beginners...` to
`'/academy/scraping-basics-javascript'` with `?legacy-js-course=...`.
> - Adds other redirects (e.g., output-schema → dataset-schema, academy
php path, advanced web scraping path fix).
> - **Content/link maintenance**
> - Repoints numerous lessons to new paths (e.g., tutorials,
Puppeteer/Playwright, advanced courses) and updates sample URLs in
integrations (Make) to the new JS course.
> - Minor copy/heading tweaks (e.g., RPA title), and consistent
slug/slug changes across documents.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2840ebd. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Michał Olender <[email protected]>1 parent 336cec3 commit d3406ef
File tree
117 files changed
+449
-209
lines changed- sources
- academy
- glossary
- concepts
- tools
- platform/expert_scraping_with_apify
- solutions
- tutorials/node_js
- webscraping
- advanced_web_scraping
- crawling
- anti_scraping/mitigation
- puppeteer_playwright
- executing_scripts
- page
- scraping_basics_javascript2
- scraping_basics_javascript
- scraping_basics_legacy
- challenge
- images
- crawling
- images
- data_extraction
- images
- images
- scraping_basics
- platform/integrations/workflows-and-notifications/make
- src
- components
- pages
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
117 files changed
+449
-209
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
534 | 534 | | |
535 | 535 | | |
536 | 536 | | |
537 | | - | |
538 | | - | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
539 | 567 | | |
540 | 568 | | |
541 | 569 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
Lines changed: 10 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
10 | 17 | | |
11 | 18 | | |
12 | 19 | | |
13 | 20 | | |
14 | 21 | | |
15 | 22 | | |
16 | | - | |
| 23 | + | |
17 | 24 | | |
18 | 25 | | |
19 | 26 | | |
| |||
39 | 46 | | |
40 | 47 | | |
41 | 48 | | |
42 | | - | |
| 49 | + | |
43 | 50 | | |
44 | 51 | | |
45 | 52 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
Lines changed: 1 addition & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | 21 | | |
26 | 22 | | |
27 | | - | |
| 23 | + | |
28 | 24 | | |
29 | 25 | | |
30 | 26 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
0 commit comments