diff --git a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
index 4d8da7a8ad..32e88224cc 100644
--- a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
+++ b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
@@ -51,23 +51,28 @@ public function preSave() {
    * {@inheritdoc}
    */
   public function postSave($update) {
-    if (!$update) {
-      if ($this->alias) {
-        $entity = $this->getEntity();
-        if ($path = \Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode())) {
+    // Only process a non-empty alias.
+    $entity = $this->getEntity();
+    if ($entity->getEntityType()->isRevisionable() && !$entity->isDefaultRevision()) {
+      $source = '/' . $entity->toUrl('revision')->getInternalPath();
+    }
+    else {
+      $source = '/' . $entity->toUrl()->getInternalPath();
+    }
+
+    if ($this->alias && (!$update || $source != $this->source)) {
+      if ($path = \Drupal::service('path.alias_storage')->save($source, $this->alias, $this->getLangcode())) {
           $this->pid = $path['pid'];
-        }
       }
     }
     else {
       // Delete old alias if user erased it.
-      if ($this->pid && !$this->alias) {
-        \Drupal::service('path.alias_storage')->delete(['pid' => $this->pid]);
+      if (!$this->alias) {
+        \Drupal::service('path.alias_storage')->delete(['source' => $source]);
       }
       // Only save a non-empty alias.
-      elseif ($this->alias) {
-        $entity = $this->getEntity();
-        \Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode(), $this->pid);
+      elseif ($source) {
+        \Drupal::service('path.alias_storage')->save($source, $this->alias, $this->getLangcode(), $this->pid);
       }
     }
   }
diff --git a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
index b31af4694b..a6805c5b91 100644
--- a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
+++ b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
@@ -28,7 +28,12 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     $entity = $items->getEntity();
     $path = [];
     if (!$entity->isNew()) {
-      $conditions = ['source' => '/' . $entity->urlInfo()->getInternalPath()];
+      if ($entity->getEntityType()->isRevisionable() && !$entity->isDefaultRevision()) {
+        $conditions = ['source' => '/' . $entity->toUrl('revision')->getInternalPath()];
+      }
+      else {
+        $conditions = ['source' => '/' . $entity->toUrl()->getInternalPath()];
+      }
       if ($items->getLangcode() != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
         $conditions['langcode'] = $items->getLangcode();
       }
diff --git a/core/modules/path/tests/src/Functional/PathContentModerationTest.php b/core/modules/path/tests/src/Functional/PathContentModerationTest.php
new file mode 100644
index 0000000000..7b2c66057c
--- /dev/null
+++ b/core/modules/path/tests/src/Functional/PathContentModerationTest.php
@@ -0,0 +1,105 @@
+<?php
+
+namespace Drupal\Tests\path\Functional;
+
+use Drupal\node\Entity\NodeType;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\workflows\Entity\Workflow;
+
+/**
+ * Tests path aliases with Content Moderation.
+ *
+ * @group path
+ */
+class PathContentModerationTest extends BrowserTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = ['node', 'path', 'content_moderation'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $node_type = NodeType::create(['name' => 'moderated', 'type' => 'moderated']);
+    $node_type->save();
+
+    $workflow = Workflow::load('editorial');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'moderated');
+    $workflow->save();
+
+    $this->drupalLogin($this->rootUser);
+  }
+
+  public function testNodePathAlias() {
+    $this->drupalPostForm('node/add/moderated', [
+      'title[0][value]' => 'moderated content',
+      'path[0][alias]' => '/moderated-content',
+    ], t('Save and Publish'));
+    $node = $this->getNodeByTitle('moderated content');
+
+    $this->drupalGet('/moderated-content');
+    $this->assertSession()->pageTextContains('moderated content');
+
+    $this->drupalPostForm('node/' . $node->id() . '/edit', [
+      'title[0][value]' => 'forward revision',
+      'path[0][alias]' => '/forward-revision',
+    ], t('Save and Create New Draft'));
+
+    $this->drupalGet('/forward-revision');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextContains('forward revision');
+    $this->drupalGet('/moderated-content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextContains('moderated content');
+
+    $this->drupalPostForm('node/' . $node->id() . '/edit', [
+      'title[0][value]' => 'revision three',
+      'path[0][alias]' => '/revision-three',
+    ], t('Save and Create New Draft'));
+
+    $this->drupalGet('/revision-three');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextContains('revision three');
+    $this->drupalGet('/forward-revision');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextContains('forward revision');
+    $this->assertSession()->pageTextNotContains('revision three');
+    $this->drupalGet('/moderated-content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextContains('moderated content');
+    $this->assertSession()->pageTextNotContains('revision three');
+
+    $this->drupalPostForm('node/' . $node->id() . '/edit', [
+      'title[0][value]' => 'revision four',
+      'path[0][alias]' => '',
+    ], t('Save and Create New Draft'));
+
+    $this->drupalGet('/node/1/revisions/4/view');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextNotContains('revision three');
+    $this->assertSession()->pageTextContains('revision four');
+    $this->drupalGet('/revision-three');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextContains('revision three');
+    $this->assertSession()->pageTextNotContains('revision four');
+    $this->drupalGet('/forward-revision');
+    $this->assertSession()->pageTextNotContains('moderated content');
+    $this->assertSession()->pageTextContains('forward revision');
+    $this->assertSession()->pageTextNotContains('revision three');
+    $this->assertSession()->pageTextNotContains('revision four');
+    $this->drupalGet('/moderated-content');
+    $this->assertSession()->pageTextNotContains('forward revision');
+    $this->assertSession()->pageTextContains('moderated content');
+    $this->assertSession()->pageTextNotContains('revision three');
+    $this->assertSession()->pageTextNotContains('revision four');
+  }
+}
\ No newline at end of file
