diff --git a/src/docs/markdown/caddyfile/directives.md b/src/docs/markdown/caddyfile/directives.md
index 1019427..d995d91 100644
--- a/src/docs/markdown/caddyfile/directives.md
+++ b/src/docs/markdown/caddyfile/directives.md
@@ -31,6 +31,10 @@ title: Caddyfile Directives
Directives are functional keywords that appear within site [blocks](/docs/caddyfile/concepts#blocks). Sometimes, they may open blocks of their own which can contain _subdirectives_, but directives **cannot** be used within other directives unless noted. For example, you can't use `basicauth` inside a `file_server` block, because `file_server` does not know how to do authentication. However, you _may_ use some directives within special directive blocks like `handle` and `route` because they are specifically designed to group HTTP handler directives.
+- [Syntax](#syntax)
+- [Directive Order](#directive-order)
+- [Sorting Algorithm](#sorting-algorithm)
+
The following directives come standard with Caddy, and can be used in the HTTP Caddyfile:
@@ -90,25 +94,25 @@ The`[brackets]` indicate optional parameters.
The ellipses `...` indicates a continuation, i.e. one or more parameters or lines.
-Subdirectives are always optional unless documented otherwise, even though they don't appear in `[brackets]`.
+Subdirectives are typically optional unless documented otherwise, even though they don't appear in `[brackets]`.
### Matchers
-Most---but not all---directives accept [matcher tokens](/docs/caddyfile/matchers#syntax), which let you filter requests. Matcher tokens are usually optional. If you see this in a directive's syntax:
+Most—but not all—directives accept [matcher tokens](/docs/caddyfile/matchers#syntax), which let you filter requests. Matcher tokens are usually optional. Directives support matchers if you see this in a directive's syntax:
```caddy-d
[]
```
-then the directive accepts a matcher token, letting you filter which requests the directive applies to.
-
-Because matcher tokens all work the same, the various possibilities for the matcher token will not be described on every page, to reduce duplication. Instead, refer to the centralized [matcher documentation](/docs/caddyfile/matchers).
+Because matcher tokens all work the same, the various possibilities for the matcher token will not be described on every page, to reduce duplication. Instead, refer to the [matcher documentation](/docs/caddyfile/matchers) for a detailed explanation of the syntax.
## Directive order
-Many directives manipulate the HTTP handler chain. The order in which those directives are evaluated matters, so a default ordering is hard-coded into Caddy:
+Many directives manipulate the HTTP handler chain. The order in which those directives are evaluated matters, so a default ordering is hard-coded into Caddy.
+
+You can override/customize this ordering by using the [`order` global option](/docs/caddyfile/options#order) or the [`route` directive](/docs/caddyfile/directives/route).
```caddy-d
tracing
@@ -155,4 +159,33 @@ file_server
acme_server
```
-You can override/customize this ordering by using the [`order` global option](/docs/caddyfile/options) or the [`route` directive](/docs/caddyfile/directives/route).
+
+
+## Sorting algorithm
+
+For ease of use, the Caddyfile adapter sorts directives according to the following rules:
+
+- Differently named directives are sorted by their position in the [default order](#directive-order#order). The default order can be overridden with the [`order` global option](/docs/caddyfile/options).
+
+- Same-named directives are sorted according to their [matchers](/docs/caddyfile/matchers#syntax).
+
+ - The highest priority is a directive with a single [path matcher](/docs/caddyfile/matchers#path-matchers).
+
+ Path matchers are sorted by specificity, from most specific to least specific.
+
+ In general, this is performed by sorting by the length of the path matcher. There is one exception where if the path ends in a `*` and the paths of the two matchers are otherwise the same, the matcher with no `*` is considered more specific and sorted higher.
+
+ For example:
+ - `/foobar` is more specific than `/foo`
+ - `/foo` is more specific than `/foo*`
+ - `/foo/*` is more specific than `/foo*`
+
+ - A directive with any other matcher is sorted next, in the order it appears in the Caddyfile.
+
+ This includes path matchers with multiple values, and [named matchers](/docs/caddyfile/matchers#named-matchers).
+
+ - A directive with no matcher (i.e. matching all requests) is sorted last.
+
+- The [`vars`](/docs/caddyfile/directives/vars) directive has its ordering by matcher reversed, because it involves setting values which can overwrite eachother, so the most specific matcher should be evaluated last.
+
+- The contents of the [`route`](/docs/caddyfile/directives/route) directive ignores all the above rules, and preserves the order the directives appear within.