diff --git a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/SharedTransitionTest.kt b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/SharedTransitionTest.kt
index 9604026..b80aaf7 100644
--- a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/SharedTransitionTest.kt
+++ b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/SharedTransitionTest.kt
@@ -77,8 +77,10 @@
 import androidx.compose.ui.graphics.compositeOver
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.layout.ScaleFactor
+import androidx.compose.ui.layout.approachLayout
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.onPlaced
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.layout.positionInWindow
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
@@ -2643,6 +2645,47 @@
     }
 
     @Test
+    fun testPlaceHolderLogicSkippedWhenNoMatch() {
+        var parentSize: IntSize? = null
+        val changeInProgress = true
+        var testSize by mutableStateOf(IntSize.Zero)
+        rule.setContent {
+            AnimatedVisibility(visible = true) {
+                SharedTransitionLayout {
+                    Box(
+                        Modifier.onSizeChanged { parentSize = it }
+                            .sharedBounds(
+                                rememberSharedContentState("test"),
+                                this@AnimatedVisibility
+                            )
+                    ) {
+                        Box(
+                            Modifier.approachLayout(
+                                    isMeasurementApproachInProgress = { changeInProgress }
+                                ) { measurable, constraints ->
+                                    measurable.measure(constraints).run {
+                                        layout(testSize.width, testSize.height) { place(0, 0) }
+                                    }
+                                }
+                                .requiredSize(40.dp, 40.dp)
+                        )
+                    }
+                }
+            }
+        }
+        rule.waitForIdle()
+        assertEquals(testSize, parentSize)
+
+        testSize = IntSize(20, 25)
+        rule.waitForIdle()
+        assertEquals(testSize, parentSize)
+
+        testSize = IntSize(35, 10)
+        rule.waitForIdle()
+        assertEquals(testSize, parentSize)
+    }
+
+    @Test
     fun testUserModifierInSharedTransitionLayout() {
         var scope: SharedTransitionScope? = null
         rule.setContent {
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SharedContentNode.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SharedContentNode.kt
index 2a3de05..8d6b5e6 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SharedContentNode.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SharedContentNode.kt
@@ -161,18 +161,20 @@
     }
 
     private fun MeasureScope.place(placeable: Placeable): MeasureResult {
-        val (w, h) =
-            state.placeHolderSize.calculateSize(
-                requireLookaheadLayoutCoordinates().size,
-                IntSize(placeable.width, placeable.height)
-            )
-        return layout(w, h) {
+        if (!sharedElement.foundMatch) {
             // No match
-            if (!sharedElement.foundMatch) {
+            return layout(placeable.width, placeable.height) {
                 // Update currentBounds
                 coordinates?.updateCurrentBounds()
                 placeable.place(0, 0)
-            } else {
+            }
+        } else {
+            val (w, h) =
+                state.placeHolderSize.calculateSize(
+                    requireLookaheadLayoutCoordinates().size,
+                    IntSize(placeable.width, placeable.height)
+                )
+            return layout(w, h) {
                 // Start animation if needed
                 if (sharedElement.targetBounds != null) {
                     boundsAnimation.animate(
