diff --git a/docs/databases/users-roles-privileges.md b/docs/databases/users-roles-privileges.md
index ce3e78f89543b3ed0a9dd8831c677c25c3da3892..8396b07db07c89ec4385c0f22222e0294cb0072d 100644
--- a/docs/databases/users-roles-privileges.md
+++ b/docs/databases/users-roles-privileges.md
@@ -12,7 +12,7 @@ We recommend creating a `metabase` database user with the following database rol
 
 Bundling your privileges into roles based on use cases makes it easier to manage privileges in the future (especially in [multi-tenant situations](#multi-tenant-permissions)). For example, you could:
 
-- Use the same `analytics` role for other BI tools in your [data stack](https://www.metabase.com/learn/databases/data-landscape#data-analysis-layer) that need read-only access to the analytics tables in your database.
+- Use the same `analytics` role for other BI tools in your [data stack](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-landscape#data-analysis-layer) that need read-only access to the analytics tables in your database.
 - Revoke the write access for `metabase_model_persistence` without affecting the write access for `metabase_actions`.
 
 ## Minimum database privileges
@@ -160,7 +160,7 @@ GRANT metabase_uploads TO metabase;
 
 ## Multi-tenant permissions
 
-If you're setting up multi-tenant permissions for customers who need SQL access, you can [create one database connection per customer](https://www.metabase.com/learn/permissions/multi-tenant-permissions#granting-customers-native-sql-access-to-their-schema). That means each customer will connect to the database using their own database user.
+If you're setting up multi-tenant permissions for customers who need SQL access, you can [create one database connection per customer](https://www.metabase.com/learn/metabase-basics/administration/permissions/multi-tenant-permissions#granting-customers-native-sql-access-to-their-schema). That means each customer will connect to the database using their own database user.
 
 Let's say you have customers named Tangerine and Lemon:
 
diff --git a/docs/exploration-and-organization/collections.md b/docs/exploration-and-organization/collections.md
index 8e44a67ecf38e7ef6f5e18822835a0dac5cb6420..6d18656869f278b9638759ced16a604e6f86ad4a 100644
--- a/docs/exploration-and-organization/collections.md
+++ b/docs/exploration-and-organization/collections.md
@@ -90,7 +90,7 @@ You can upload data to collections. See [Uploading data](./uploads.md)]
 ## Further reading
 
 - [Keeping your analytics organized](https://www.metabase.com/learn/administration/same-page)
-- [Multiple environments](https://www.metabase.com/learn/administration/multi-env#one-collection-per-environment)
+- [Multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env#one-collection-per-environment)
 
 [dashboards]: ../dashboards/introduction.md
 [models]: ../data-modeling/models.md
diff --git a/docs/people-and-groups/google-and-ldap.md b/docs/people-and-groups/google-and-ldap.md
index 2d46a91c2ff7505f8a2edf198f7faf0b48c7bdad..7d269a1743a40a1cf56f4b5b10197a3330cc2c35 100644
--- a/docs/people-and-groups/google-and-ldap.md
+++ b/docs/people-and-groups/google-and-ldap.md
@@ -99,7 +99,7 @@ This default command will work for most LDAP servers, since `inetOrgPerson` is a
 
 ### LDAP group mapping
 
-Manually assigning people to [groups](./managing.md#groups) in Metabase after they've logged in via SSO can get tedious. Instead, you can take advantage of the groups that already exist in your LDAP directory by enabling [group mappings](https://www.metabase.com/learn/permissions/ldap-auth-access-control#group-management).
+Manually assigning people to [groups](./managing.md#groups) in Metabase after they've logged in via SSO can get tedious. Instead, you can take advantage of the groups that already exist in your LDAP directory by enabling [group mappings](https://www.metabase.com/learn/metabase-basics/administration/permissions/ldap-auth-access-control#group-management).
 
 Scroll to **Group Schema** on the same LDAP settings page, and click the toggle to enable group mapping. Selecting **Edit Mapping** will bring up a modal where you can create and edit mappings, specifying which LDAP group corresponds to which Metabase group.
 
diff --git a/docs/permissions/data-sandboxes.md b/docs/permissions/data-sandboxes.md
index 6f68b33afdbfd768f77d644465e4569f5b420dc2..2b9d99a871f7858dbe4c36e354ce2330d0e3c7e8 100644
--- a/docs/permissions/data-sandboxes.md
+++ b/docs/permissions/data-sandboxes.md
@@ -60,7 +60,7 @@ You can also use a custom sandbox to:
 
 - [Display an edited column instead of hiding the column](#displaying-edited-columns-in-an-custom-sandbox).
 - [Pass a user attribute to a SQL parameter](#restricting-rows-in-an-custom-sandbox-with-user-attributes).
-- [Pass a user attribute to a Markdown parameter](https://www.metabase.com/learn/dashboards/markdown#custom-url-with-a-sandboxing-attribute).
+- [Pass a user attribute to a Markdown parameter](https://www.metabase.com/learn/metabase-basics/querying-and-dashboards/dashboards/markdown#custom-url-with-a-sandboxing-attribute).
 
 ## Limitations
 
@@ -106,7 +106,7 @@ Examples of user attributes in play:
 
 - [Restricting rows in basic sandboxes](./data-sandbox-examples.md#basic-sandbox-setup---filtering-rows-based-on-user-attributes)
 - [Restricting rows in custom sandboxes](./data-sandbox-examples.md#custom-example-2-filtering-rows-and-columns)
-- [Displaying custom text in Markdown dashboard cards](https://www.metabase.com/learn/dashboards/markdown#custom-url-with-a-sandboxing-attribute)
+- [Displaying custom text in Markdown dashboard cards](https://www.metabase.com/learn/metabase-basics/querying-and-dashboards/dashboards/markdown#custom-url-with-a-sandboxing-attribute)
 
 ## Creating a basic sandbox
 
diff --git a/docs/permissions/introduction.md b/docs/permissions/introduction.md
index 48b6a7c9b2652846c865b3143d556e622b8c7aab..31de129b75b44971cc783e61f26c48e246e275ab 100644
--- a/docs/permissions/introduction.md
+++ b/docs/permissions/introduction.md
@@ -73,7 +73,7 @@ Whenever you change permissions for a group, make sure you:
 [data-sandboxing]: ./data-sandboxes.md
 [permissions]: https://www.metabase.com/learn/permissions/
 [sandbox-columns]: https://www.metabase.com/learn/permissions/data-sandboxing-column-permissions
-[sandbox-rows]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissionsk
+[sandbox-rows]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissions
 [slack-integration]: ../configuring-metabase/slack.md
 [sql-snippet-folders]: ../questions/native-editor/sql-snippets.md
 [table-permissions]: data.md#table-permissions
diff --git a/docs/questions/native-editor/sql-parameters.md b/docs/questions/native-editor/sql-parameters.md
index 6003bada8d4ff3dcfe9e3c0fbf7f8ae0623a090d..47a699eec8e23772bc728ed8887581e84677448e 100644
--- a/docs/questions/native-editor/sql-parameters.md
+++ b/docs/questions/native-editor/sql-parameters.md
@@ -428,4 +428,4 @@ More on [Dashboard filters][dashboard-filters].
 [sql-variables]: https://www.metabase.com/learn/sql-questions/sql-variables.html
 [troubleshooting-filters]: ../../troubleshooting-guide/filters.md
 [troubleshooting-sql]: ../../troubleshooting-guide/sql.md
-[basic-input]: https://www.metabase.com/learn/sql-questions/sql-variables.html#basic-input-variable-text
+[basic-input]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-variables#basic-input-variable-text
diff --git a/docs/questions/query-builder/expressions/case.md b/docs/questions/query-builder/expressions/case.md
index 9649505471e2992b59dd1c95c6c2b28766246719..3174ca93707a631649fbed81878628da04aa84cd 100644
--- a/docs/questions/query-builder/expressions/case.md
+++ b/docs/questions/query-builder/expressions/case.md
@@ -329,17 +329,17 @@ case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Bird",
 - [Custom expressions tutorial][custom-expressions-learn]
 
 [aggregate-functions]: ../expressions-list.md#aggregations
-[business-logic]: https://www.metabase.com/learn/analytics/avoiding-data-jargon#create-specific-language-and-shared-definitions
+[business-logic]: https://www.metabase.com/learn/grow-your-data-skills/analytics/avoiding-data-jargon#create-specific-language-and-shared-definitions
 [countif]: ../expressions-list.md#countif
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-list]: ../expressions-list.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
 [data-sandboxing-docs]: ../../../permissions/data-sandboxes.md
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [filter-learn]: https://www.metabase.com/learn/questions/searching-tables
 [notebook-editor-def]: https://www.metabase.com/glossary/notebook_editor
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
 [spreadsheets-to-bi]: /blog/spreadsheets-to-bi
-[sql-reference-guide]: https://www.metabase.com/learn/debugging-sql/sql-syntax.html#common-sql-reference-guides
+[sql-reference-guide]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides
 [sumif]: ./sumif.md
diff --git a/docs/questions/query-builder/expressions/coalesce.md b/docs/questions/query-builder/expressions/coalesce.md
index c7cd19eb1bc6889ed9f3026b042fb1f055f2b451..769d9bf1c08e7bacdaa4e2ed97a9b8363d9c0f5b 100644
--- a/docs/questions/query-builder/expressions/coalesce.md
+++ b/docs/questions/query-builder/expressions/coalesce.md
@@ -175,10 +175,10 @@ coalesce([Notes], [Comments] "No notes or comments.")
 [cast-data-type]: ../../../data-modeling/metadata-editing.md#casting-to-a-specific-data-type
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
-[missing-dates]: https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data#how-to-fill-in-data-for-missing-report-dates
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
+[missing-dates]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-missing-data#how-to-fill-in-data-for-missing-report-dates
 [notebook-editor-def]: https://www.metabase.com/glossary/notebook_editor
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
 [spreadsheets-to-bi]: /blog/spreadsheets-to-bi
-[sql-reference-guide]: https://www.metabase.com/learn/debugging-sql/sql-syntax.html#common-sql-reference-guides
+[sql-reference-guide]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides
diff --git a/docs/questions/query-builder/expressions/concat.md b/docs/questions/query-builder/expressions/concat.md
index 3e8e98d0ad82a341c4a0119ed28173a14f72c2b5..b8d9979e06492ce1b3a03d0d900bf6d2bf84aebc 100644
--- a/docs/questions/query-builder/expressions/concat.md
+++ b/docs/questions/query-builder/expressions/concat.md
@@ -11,7 +11,7 @@ title: Concat
 | `concat(value1, value2, ...)` | `concat("Vienna, ", "Austria")`|
 | Combines two or more strings. | "Vienna, Austria"              |
 
-## Combining text from different columns 
+## Combining text from different columns
 
 | City     | Country | Location         |
 |----------|---------|------------------|
@@ -27,7 +27,7 @@ CONCAT([City], ", ", [Country])
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `concat`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `concat`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
@@ -45,7 +45,7 @@ This section covers functions and formulas that work the same way as the Metabas
 
 ### SQL
 
-In most cases (unless you're using a NoSQL database), questions created from the [notebook editor](https://www.metabase.com/glossary/notebook_editor) are converted into SQL queries that run against your database or data warehouse. 
+In most cases (unless you're using a NoSQL database), questions created from the [notebook editor](https://www.metabase.com/glossary/notebook_editor) are converted into SQL queries that run against your database or data warehouse.
 
 If our [sample data](#combining-text-from-different-columns) is stored in a relational database:
 
@@ -93,4 +93,4 @@ concat([City], ", ", [Country])
 ## Further reading
 
 - [Custom expressions documentation](../expressions.md)
-- [Custom expressions tutorial](https://www.metabase.com/learn/questions/custom-expressions)
\ No newline at end of file
+- [Custom expressions tutorial](https://www.metabase.com/learn/questions/custom-expressions)
diff --git a/docs/questions/query-builder/expressions/converttimezone.md b/docs/questions/query-builder/expressions/converttimezone.md
index 73e11839b5a27ce43659d007ed1209a70122e97e..3f98bf842a2a5d20870d0048cdb0602705f98c1b 100644
--- a/docs/questions/query-builder/expressions/converttimezone.md
+++ b/docs/questions/query-builder/expressions/converttimezone.md
@@ -86,7 +86,7 @@ For more gory details, see [Limitations](#limitations).
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `convertTimezone` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `convertTimezone` |
 | ------------------------------------------------------------------------------------------------ | ---------------------------- |
 | String                                                                                           | ❌                           |
 | Number                                                                                           | ❌                           |
diff --git a/docs/questions/query-builder/expressions/countif.md b/docs/questions/query-builder/expressions/countif.md
index 55a865132b951c5308b69db961d3304a3fcdc835..fc0e3d50fac027d359d1a5fa0da76f6e6e8ad059 100644
--- a/docs/questions/query-builder/expressions/countif.md
+++ b/docs/questions/query-builder/expressions/countif.md
@@ -31,7 +31,7 @@ We'll use the following sample data to show you `CountIf` with [required](#requi
 | ID  | Plan        | Active Subscription |
 |-----|-------------| --------------------|
 | 1   | Basic       | true                |
-| 2   | Basic       | true                | 
+| 2   | Basic       | true                |
 | 3   | Basic       | false               |
 | 4   | Business    | false               |
 | 5   | Premium     | true                |
@@ -80,7 +80,7 @@ Using the sample data:
 | ID  | Plan        | Active Subscription |
 |-----|-------------| --------------------|
 | 1   | Basic       | true                |
-| 2   | Basic       | true                | 
+| 2   | Basic       | true                |
 | 3   | Basic       | false               |
 | 4   | Business    | false               |
 | 5   | Premium     | true                |
@@ -103,7 +103,7 @@ To view your conditional counts by plan, set the **Group by** column to "Plan".
 
 | Plan      | Total Inactive Subscriptions |
 |-----------|------------------------------|
-| Basic     | 1                            | 
+| Basic     | 1                            |
 | Business  | 1                            |
 | Premium   | 0                            |
 
@@ -111,7 +111,7 @@ To view your conditional counts by plan, set the **Group by** column to "Plan".
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `CountIf`      |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `CountIf`      |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ❌                        |
@@ -150,7 +150,7 @@ CountIf([Plan] = "Basic")
 
 The `case` version lets you count a different column when the condition isn't met. For example, if you've got data from different sources:
 
-| ID: Source A  | Plan: Source A | ID: Source B  | Plan: Source B       | 
+| ID: Source A  | Plan: Source A | ID: Source B  | Plan: Source B       |
 |---------------|----------------|---------------| ---------------------|
 | 1             | Basic          |               |                      |
 |               |                | B             | basic                |
@@ -164,7 +164,7 @@ To count the total number of Basic plans across both sources, you could create a
 - Count the rows in "ID: Source B" where "Plan: Source B = "basic"
 
 ```
-Count(case([Plan: Source A] = "Basic", [ID: Source A], 
+Count(case([Plan: Source A] = "Basic", [ID: Source A],
             case([Plan: Source B] = "basic", [ID: Source B])))
 ```
 
@@ -177,7 +177,7 @@ If our sample data is a time series:
 | ID  | Plan        | Active Subscription | Created Date     |
 |-----|-------------| --------------------|------------------|
 | 1   | Basic       | true                | October 1, 2020  |
-| 2   | Basic       | true                | October 1, 2020  | 
+| 2   | Basic       | true                | October 1, 2020  |
 | 3   | Basic       | false               | October 1, 2020  |
 | 4   | Business    | false               | November 1, 2020 |
 | 5   | Premium     | true                | November 1, 2020 |
@@ -217,11 +217,11 @@ CountIf([Plan] = "Basic")
 If you want to get [conditional counts broken out by group](#conditional-counts-by-group), the SQL query:
 
 ```sql
-SELECT 
+SELECT
     plan,
     COUNT(CASE WHEN active_subscription = false THEN id END) AS total_inactive_subscriptions
 FROM accounts
-GROUP BY 
+GROUP BY
     plan
 ```
 
diff --git a/docs/questions/query-builder/expressions/datetimeadd.md b/docs/questions/query-builder/expressions/datetimeadd.md
index cacc59981a19260b9474c52cbeb671dbb9bfee98..7ed4ed9227f7c26fd7995996151369ac29a4f22d 100644
--- a/docs/questions/query-builder/expressions/datetimeadd.md
+++ b/docs/questions/query-builder/expressions/datetimeadd.md
@@ -75,7 +75,7 @@ case(between(now, [Opened On], [Finish By]), "Yes", "No")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeAdd` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeAdd` |
 | ------------------------------------------------------------------------------------------------ | ------------------------ |
 | String                                                                                           | ❌                       |
 | Number                                                                                           | ❌                       |
diff --git a/docs/questions/query-builder/expressions/datetimediff.md b/docs/questions/query-builder/expressions/datetimediff.md
index 6fb357dec34dbf3d053e9d25388f39f766b37262..2c7364544c00cff66df2f6417184bf9b5a80787b 100644
--- a/docs/questions/query-builder/expressions/datetimediff.md
+++ b/docs/questions/query-builder/expressions/datetimediff.md
@@ -60,7 +60,7 @@ datetimeDiff([Aging Start], now, "day")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeDiff` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeDiff` |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ❌                        |
@@ -103,7 +103,7 @@ is equivalent to the Metabase `datetimeDiff` expression:
 datetimeDiff([Aging Start], [Aging End], "month")
 ```
 
-Some databases, such as Snowflake and BigQuery, support functions like `DATEDIFF` or `DATE_DIFF`. For more info, check out our list of [common SQL reference guides](https://www.metabase.com/learn/debugging-sql/sql-syntax#common-sql-reference-guides).
+Some databases, such as Snowflake and BigQuery, support functions like `DATEDIFF` or `DATE_DIFF`. For more info, check out our list of [common SQL reference guides](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides).
 
 ### Spreadsheets
 
diff --git a/docs/questions/query-builder/expressions/datetimesubtract.md b/docs/questions/query-builder/expressions/datetimesubtract.md
index c6aacbc8199f31aa221bc1c9e1f94f6c62aa0c24..a2054a76a68ebe6b6d53c1f3f3e5bd30280d2c87 100644
--- a/docs/questions/query-builder/expressions/datetimesubtract.md
+++ b/docs/questions/query-builder/expressions/datetimesubtract.md
@@ -72,7 +72,7 @@ case(between(now, [Depart At], [Arrive By]), "Yes", "No")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeSubtract`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeSubtract`  |
 | ----------------------- | -------------------- |
 | String                  | ❌                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/isempty.md b/docs/questions/query-builder/expressions/isempty.md
index edfebf5eb151b49ff5d11b73c9d158282dbb5302..110bc30c85a0ef93f2876b9d60698e5efc54aac0 100644
--- a/docs/questions/query-builder/expressions/isempty.md
+++ b/docs/questions/query-builder/expressions/isempty.md
@@ -135,7 +135,7 @@ case(isempty([Feedback]), "No feedback.", [Feedback])
 
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [notebook-editor-def]: https://www.metabase.com/glossary/query_builder
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
diff --git a/docs/questions/query-builder/expressions/isnull.md b/docs/questions/query-builder/expressions/isnull.md
index 9c26d37175db5d0fa323325337349332e5f9320c..28a174b2fd512fc89e979a65e35acbf061d855a8 100644
--- a/docs/questions/query-builder/expressions/isnull.md
+++ b/docs/questions/query-builder/expressions/isnull.md
@@ -141,7 +141,7 @@ case(isnull([Feedback]), "Unknown feedback.", [Feedback])
 
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [notebook-editor-def]: https://www.metabase.com/glossary/query_builder
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
diff --git a/docs/questions/query-builder/expressions/now.md b/docs/questions/query-builder/expressions/now.md
index d53908b893d518c7411292ed7318515b98399d85..e4337912619b19dfae14080841c956ad97b8430d 100644
--- a/docs/questions/query-builder/expressions/now.md
+++ b/docs/questions/query-builder/expressions/now.md
@@ -19,7 +19,7 @@ Let's say you have some project data, and you want to add a status column for ea
 To mark a task in progress, you'd use the expression:
 
 ```
-now >= [Start] AND now < [Deadline] 
+now >= [Start] AND now < [Deadline]
 ```
 
 To check if you need to ask for an extension:
@@ -44,7 +44,7 @@ case(now >= [Start] AND now < [Deadline], "In progress",
 
 ## Data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Returned by `now`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Returned by `now`  |
 | ----------------------- | -------------------- |
 | String                  | ❌                   |
 | Number                  | ❌                   |
@@ -52,7 +52,7 @@ case(now >= [Start] AND now < [Deadline], "In progress",
 | Boolean                 | ❌                   |
 | JSON                    | ❌                   |
 
-`now` returns a `timestamp with time zone` if time zones are supported by your database, otherwise `now` returns a `timestamp without time zone`. 
+`now` returns a `timestamp with time zone` if time zones are supported by your database, otherwise `now` returns a `timestamp without time zone`.
 
 For more info about the way these data types behave in Metabase, see [Timezones](../../../configuring-metabase/timezones.md#data-types).
 
diff --git a/docs/questions/query-builder/expressions/offset.md b/docs/questions/query-builder/expressions/offset.md
index e65837174a9e12b1bd5783605ca322cb9f4c73ee..d934d076bf80a63fb55736b1127fe7d2516e8b3f 100644
--- a/docs/questions/query-builder/expressions/offset.md
+++ b/docs/questions/query-builder/expressions/offset.md
@@ -24,7 +24,7 @@ Because `Offset` refers to other rows, the order of the breakouts matters (the b
 
 The `Offset` function returns whatever value is in the offset row.
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Returned by `Offset` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Returned by `Offset` |
 | ------------------------------------------------------------------------------------------------ | -------------------- |
 | String                                                                                           | ✅                    |
 | Number                                                                                           | ✅                    |
diff --git a/docs/questions/query-builder/expressions/regexextract.md b/docs/questions/query-builder/expressions/regexextract.md
index 242ff3d3603da28b08e57b714f65e24bd4cfeb74..c09d937917f1134d044ec0d5b58b81ea6067c911 100644
--- a/docs/questions/query-builder/expressions/regexextract.md
+++ b/docs/questions/query-builder/expressions/regexextract.md
@@ -43,7 +43,7 @@ Now, you can use **Campaign Name** in places where you need clean labels, such a
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `regexextract`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `regexextract`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/substring.md b/docs/questions/query-builder/expressions/substring.md
index a5a6923c530ddec2b825926efd1f5b6dc71b2a49..83dadd2c34b1f240c36ce02115238108225cb99e 100644
--- a/docs/questions/query-builder/expressions/substring.md
+++ b/docs/questions/query-builder/expressions/substring.md
@@ -4,7 +4,7 @@ title: Substring
 
 # Substring
 
-`substring` extracts part of some text. This function is useful for cleaning up text (or any value with a [string data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types)) that has a consistent format.
+`substring` extracts part of some text. This function is useful for cleaning up text (or any value with a [string data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types)) that has a consistent format.
 
 For example, `substring` should work well on strings like SKU numbers, ISO codes, and standardized email addresses.
 
@@ -56,7 +56,7 @@ substring([Mission ID], (1 + length([Mission ID]) - 3), 3)
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `substring`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `substring`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/sumif.md b/docs/questions/query-builder/expressions/sumif.md
index 8378145ce7549eb069ee9ec731f246f1bfca0add..c94873d2d555af67b2fa51e585c408cf7078c896 100644
--- a/docs/questions/query-builder/expressions/sumif.md
+++ b/docs/questions/query-builder/expressions/sumif.md
@@ -32,7 +32,7 @@ We'll use the following sample data to show you `SumIf` with [required](#require
 | Payment  | Plan        | Date Received     |
 |----------|-------------| ------------------|
 | 100      | Basic       | October 1, 2020   |
-| 100      | Basic       | October 1, 2020   | 
+| 100      | Basic       | October 1, 2020   |
 | 200      | Business    | October 1, 2020   |
 | 200      | Business    | November 1, 2020  |
 | 400      | Premium     | November 1, 2020  |
@@ -79,7 +79,7 @@ To get a conditional subtotal for a category or group, such as the total payment
 | Payment  | Plan        | Date Received     |
 |----------|-------------| ------------------|
 | 100      | Basic       | October 1, 2020   |
-| 100      | Basic       | October 1, 2020   | 
+| 100      | Basic       | October 1, 2020   |
 | 200      | Business    | October 1, 2020   |
 | 200      | Business    | November 1, 2020  |
 | 400      | Premium     | November 1, 2020  |
@@ -90,7 +90,7 @@ To sum payments for the Business and Premium plans:
 SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")
 ```
 
-Or, sum payments for all plans that aren't "Basic": 
+Or, sum payments for all plans that aren't "Basic":
 
 ```
 SumIf([Payment], [Plan] != "Basic")
@@ -102,14 +102,14 @@ To view those payments by month, set the **Group by** column to "Date Received:
 
 | Date Received: Month | Total Payments for Business and Premium Plans |
 |----------------------|-----------------------------------------------|
-| October              | 200                                           | 
+| October              | 200                                           |
 | November             | 600                                           |
 
 > Tip: when sharing your work with other people, it's helpful to use the `OR` filter, even though the `!=` filter is shorter. The inclusive `OR` filter makes it easier to understand which categories (e.g., plans) are included in the sum.
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `SumIf`        |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `SumIf`        |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ✅                        |
@@ -163,7 +163,7 @@ For example, to get the running total of payments for the Business and Premium p
 
 | Date Received: Month | Total Payments for Business and Premium Plans |
 |----------------------|-----------------------------------------------|
-| October              | 200                                           | 
+| October              | 200                                           |
 | November             | 800                                           |
 
 Create an aggregation from **Summarize** > **Custom expression**:
@@ -181,7 +181,7 @@ When you run a question using the [query builder](https://www.metabase.com/gloss
 If our [payment sample data](#sumif) is stored in a PostgreSQL database, the SQL query:
 
 ```sql
-SELECT 
+SELECT
     SUM(CASE WHEN plan = "Basic" THEN payment ELSE 0 END) AS total_payments_basic
 FROM invoices
 ```
@@ -195,11 +195,11 @@ SumIf([Payment], [Plan] = "Basic")
 To add [multiple conditions with a grouping column](#conditional-subtotals-by-group), use the SQL query:
 
 ```sql
-SELECT 
+SELECT
     DATE_TRUNC("month", date_received)                       AS date_received_month,
     SUM(CASE WHEN plan = "Business" THEN payment ELSE 0 END) AS total_payments_business_or_premium
 FROM invoices
-GROUP BY 
+GROUP BY
     DATE_TRUNC("month", date_received)
 ```
 
diff --git a/docs/troubleshooting-guide/cant-see-tables.md b/docs/troubleshooting-guide/cant-see-tables.md
index beb8f287c53213f381d101caa5dfe727dfdd233e..03c1a0224aeac1f1d1d3011f30411e72cfa78a95 100644
--- a/docs/troubleshooting-guide/cant-see-tables.md
+++ b/docs/troubleshooting-guide/cant-see-tables.md
@@ -50,7 +50,7 @@ To make sure that your table is actually queryable by Metabase:
 
 If there's a problem with your table name or database permissions, you'll get an error message like:
 
-- [Table not found](https://www.metabase.com/learn/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized)
+- [Table not found](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized)
 - [Permission denied](./data-permissions.md#getting-a-permission-denied-error-message)
 
 For less common errors, try searching or asking the [Metabase community](https://discourse.metabase.com/).
diff --git a/docs/troubleshooting-guide/db-performance.md b/docs/troubleshooting-guide/db-performance.md
index b2f31877c5105d3b38250a4cd13471bb454b001a..ab97b5700b992d8755b036a3d2abbde30a7aa2dd 100644
--- a/docs/troubleshooting-guide/db-performance.md
+++ b/docs/troubleshooting-guide/db-performance.md
@@ -20,7 +20,7 @@ To fix problems with your Metabase [application database](../installation-and-op
    - More people are using Metabase to access your database,
    - People are accessing your database more often, or
    - A script or application (other than Metabase) is accessing the database frequently.
-3. If specific tables are being queried a lot, try [Optimizing your table schemas](https://www.metabase.com/learn/administration/making-dashboards-faster#organize-data-to-anticipate-common-questions).
+3. If specific tables are being queried a lot, try [Optimizing your table schemas](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#organize-data-to-anticipate-common-questions).
 4. Run a question from Metabase, then [run the same query](../questions/query-builder/introduction.md#viewing-the-sql-that-powers-your-question) directly against your database.
    - If the queries take about the same time, your data or usage might be outgrowing your database. You can give your database more resources, or consider [upgrading your hardware](https://www.metabase.com/learn/analytics/which-data-warehouse).
    - If the query in Metabase takes longer than a direct query against your database, you might need to adjust the deployment of your Metabase app. Check out some options in [Metabase at scale](https://www.metabase.com/learn/administration/metabase-at-scale).
diff --git a/docs/troubleshooting-guide/error-message.md b/docs/troubleshooting-guide/error-message.md
index bb6ce65f2b17ad5cf7bde60bbf83874bdcbc2033..0be3d29a860e3aae760429741a087a153a7e3f45 100644
--- a/docs/troubleshooting-guide/error-message.md
+++ b/docs/troubleshooting-guide/error-message.md
@@ -10,8 +10,8 @@ An error message can help you find the right troubleshooting guide. The exact wo
 
 See if your error details contain any of:
 
-- [Table or column "not found" or "not recognized"](https://www.metabase.com/learn/debugging-sql/sql-syntax.html#column-or-table-name-is-not-found-or-not-recognized).
-- [Function does not exist](https://www.metabase.com/learn/debugging-sql/sql-syntax.html#sql-function-does-not-exist).
+- [Table or column "not found" or "not recognized"](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized).
+- [Function does not exist](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#sql-function-does-not-exist).
 - [Permission denied](./data-permissions.md#getting-a-permission-denied-error-message).
 
 For example, this SQL error tells you that the function `DATEFROMPARTS` does not work on a BigQuery database:
diff --git a/docs/troubleshooting-guide/models.md b/docs/troubleshooting-guide/models.md
index d3121dde0488383e63c5e1fff1b3501c0cdbbedf..a921670501b3713259a204d283425be2ab663033 100644
--- a/docs/troubleshooting-guide/models.md
+++ b/docs/troubleshooting-guide/models.md
@@ -59,20 +59,20 @@ If you can’t solve your problem using the troubleshooting guides:
 - Search or ask the [Metabase community][discourse].
 - Search for [known model issues][known-issues-models] using the label `Querying/Models`. For more information, go to [How to find a known bug or limitation][known-issues].
 
-[analytics-database-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#consider-a-database-optimized-for-analytics
-[denormalize-data-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#denormalize-data
+[analytics-database-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#consider-a-database-optimized-for-analytics
+[denormalize-data-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#denormalize-data
 [discourse]: https://discourse.metabase.com/
-[flatten-json-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#pull-data-out-of-json-and-slot-its-keys-into-columns
-[indexes-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#index-frequently-queried-columns
+[flatten-json-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#pull-data-out-of-json-and-slot-its-keys-into-columns
+[indexes-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#index-frequently-queried-columns
 [known-issues]: ./known-issues.md
 [known-issues-models]: https://github.com/metabase/metabase/labels/Querying%2FModels
-[limit-data-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#ask-for-less-data
-[materialize-views-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#materialize-views-create-new-tables-to-store-query-results
+[limit-data-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#ask-for-less-data
+[materialize-views-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#materialize-views-create-new-tables-to-store-query-results
 [model-button-image]: https://www.metabase.com/learn/images/models/model-icon.png
 [model-docs]: ../data-modeling/models.md
 [nested-query-settings-docs]: ../configuring-metabase/settings.md#enable-nested-queries
-[replicate-database-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#replicate-your-database
-[sql-explain-learn]: https://www.metabase.com/learn/sql-questions/sql-best-practices.html#explain
-[summary-tables-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#aggregate-data-ahead-of-time-with-summary-tables
+[replicate-database-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#replicate-your-database
+[sql-explain-learn]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-best-practices#explain
+[summary-tables-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#aggregate-data-ahead-of-time-with-summary-tables
 [troubleshooting-sandboxing]: ./sandboxing.md
 [model-persistence]: https://www.metabase.com/docs/latest/data-modeling/model-persistence
diff --git a/docs/troubleshooting-guide/my-dashboard-is-slow.md b/docs/troubleshooting-guide/my-dashboard-is-slow.md
index 305dbadc15ae7a293c0e3c3840565cdfa3d7de56..d9158b4094d5010151aff144565bd453acaf3d9b 100644
--- a/docs/troubleshooting-guide/my-dashboard-is-slow.md
+++ b/docs/troubleshooting-guide/my-dashboard-is-slow.md
@@ -34,7 +34,7 @@ Aside from running faster, a small and focused dashboard is also easier for peop
 
 If you have a dashboard that many people check around the same time (e.g., at the start of the work day), you may end up with queued queries or saturated database connections. Caching allows you to prepare for peak traffic by running those slow queries once, ahead of time, so that the results are ready to go.
 
-Caching takes less effort because it doesn't involve any changes to your schemas or databases. If you're ready to invest more resources into the root cause of dashboard performance issues, check out this list of common [schema and database optimizations](https://metabase.com/learn/administration/making-dashboards-faster#organize-data-to-anticipate-common-questions).
+Caching takes less effort because it doesn't involve any changes to your schemas or databases. If you're ready to invest more resources into the root cause of dashboard performance issues, check out this list of common [schema and database optimizations](https://metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#organize-data-to-anticipate-common-questions).
 
 ## Embedded dashboard is slow compared to original dashboard
 
diff --git a/docs/troubleshooting-guide/sandboxing.md b/docs/troubleshooting-guide/sandboxing.md
index 2b7b8289651aed4189c11e49423676b559bcb543..0691e86f3c4d33b596528e75395642ea136f2353 100644
--- a/docs/troubleshooting-guide/sandboxing.md
+++ b/docs/troubleshooting-guide/sandboxing.md
@@ -170,12 +170,12 @@ The administrator can [create a new group][groups] to capture precisely who's al
 [data-permissions]: https://www.metabase.com/learn/permissions/data-permissions
 [groups]: ../people-and-groups/managing.md#groups
 [jwt-auth]: ../people-and-groups/authenticating-with-jwt.md
-[locked-parameters]: https://www.metabase.com/learn/customer-facing-analytics/embedding-charts-and-dashboards#hide-or-lock-parameters-to-restrict-what-data-is-shown
+[locked-parameters]: https://www.metabase.com/learn/metabase-basics/embedding/charts-and-dashboards#hide-or-lock-parameters-to-restrict-what-data-is-shown
 [permissions]: https://www.metabase.com/learn/permissions/data-permissions
 [public-sharing]: ../questions/sharing/public-links.md
 [row-permissions]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissions
 [sandboxing-your-data]: ../permissions/data-sandboxes.md
-[static-embedding]: https://www.metabase.com/learn/customer-facing-analytics/embedding-charts-and-dashboards#enable-embedding-in-other-applications
+[static-embedding]: https://www.metabase.com/learn/metabase-basics/embedding/charts-and-dashboards#enable-embedding-in-other-applications
 [sandbox-limitations]: ../permissions/data-sandboxes.md#limitations
 [troubleshooting-permissions]: ./permissions.md
 [unsupported-databases]: ../permissions/data-sandboxes.md#limitations
diff --git a/docs/troubleshooting-guide/sql.md b/docs/troubleshooting-guide/sql.md
index e6d512bb9b0b72e1c9cd89e6316bc194f99671d2..c2c002bd185be5d3cce137a811d3358943c7e6cc 100644
--- a/docs/troubleshooting-guide/sql.md
+++ b/docs/troubleshooting-guide/sql.md
@@ -6,8 +6,8 @@ title: Troubleshooting SQL questions
 
 ## Incorrect results
 
-- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
-- [Results have duplicated rows](https://www.metabase.com/learn/debugging-sql/sql-logic-duplicated-data).
+- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
+- [Results have duplicated rows](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-duplicated-data).
 - [Results are missing rows](https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data).
 - [Dates and times are wrong](./timezones.md).
 - [Data isn't up to date](./sync-fingerprint-scan.md).
@@ -18,7 +18,7 @@ title: Troubleshooting SQL questions
 - [SQL query contains table aliases](../questions/native-editor/sql-parameters.md#field-filters-dont-work-with-table-aliases).
 - [SQL syntax error: missing `FROM` clause](../questions/native-editor/sql-parameters.md#field-filters-must-be-connected-to-fields-included-in-the-query).
 - [No option to display a filter widget](../questions/native-editor/sql-parameters.md#field-filter-compatible-types).
-- [I don't know the SQL variable type](https://www.metabase.com/learn/sql-questions/sql-variables#the-different-types-of-variables-available-for-native-sql-queries).
+- [I don't know the SQL variable type](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-variables#the-different-types-of-variables-available-for-native-sql-queries).
 
 ## SQL syntax errors
 
diff --git a/docs/troubleshooting-guide/visualization.md b/docs/troubleshooting-guide/visualization.md
index dcc91b41ec6b4dba18690e2adc6602afd72f81c9..beb89f74a163889c55b450f72554192e971a164d 100644
--- a/docs/troubleshooting-guide/visualization.md
+++ b/docs/troubleshooting-guide/visualization.md
@@ -23,13 +23,13 @@ The visualization settings on a card are independent of the settings on the orig
 
 Go to your SQL question and [change the visualization type](../questions/sharing/visualizing-results.md) to a table. Then, check if any of the following situations apply to the raw query results:
 
-- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
-- [Results have duplicated rows](https://www.metabase.com/learn/debugging-sql/sql-logic-duplicated-data).
+- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
+- [Results have duplicated rows](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-duplicated-data).
 - [Results are missing rows](https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data).
 
 **Explanation**
 
-If your question or dashboard card is powered by a handwritten [SQL query](../questions/native-editor/writing-sql.md) rather than the [query builder](../questions/query-builder/introduction.md), your visualization is going to be more sensitive to changes in the underlying data (for example, renamed fields, or the sudden appearance of a wild null value). To learn more, read about [Common reasons for unexpected query results](https://www.metabase.com/learn/debugging-sql/sql-logic#common-reasons-for-unexpected-query-results).
+If your question or dashboard card is powered by a handwritten [SQL query](../questions/native-editor/writing-sql.md) rather than the [query builder](../questions/query-builder/introduction.md), your visualization is going to be more sensitive to changes in the underlying data (for example, renamed fields, or the sudden appearance of a wild null value). To learn more, read about [Common reasons for unexpected query results](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#common-reasons-for-unexpected-query-results).
 
 If you're having problems with things like SQL syntax errors or [SQL variables](https://www.metabase.com/glossary/variable#example-variable-in-metabase), see [Troubleshooting SQL questions](./sql.md) for more help.