diff --git a/source/html/sync.go b/source/html/sync.go
index 98046a792a98f9c5b220f963fd997aa86dfd4983..fd178314c3ba415ed87734737989f5c68e9361fb 100644
--- a/source/html/sync.go
+++ b/source/html/sync.go
@@ -66,7 +66,7 @@ func SyncHtml(p string) error {
 		if err != nil {
 			return err
 		}
-
+		
 		if sourceFiles[absSource], err = readHTML(absSource); err != nil {
 			return err
 		}
@@ -140,85 +140,89 @@ func SyncHtml(p string) error {
 				destinationFile[absSource] = append(destinationFile[absSource], d)
 			}
 		}
+	}
 
-		for _, r := range specification.Sync {
-			source := r.Source
-			absSource, err := filepath.Abs(source.Path)
-			if err != nil {
-				return err
-			}
-			sourceSelector := source.Selector
+	for _, r := range specification.Sync {
+		source := r.Source
+		absSource, err := filepath.Abs(source.Path)
+		if err != nil {
+			return err
+		}
+		sourceSelector := source.Selector
 
-			query, err := cascadia.Compile(sourceSelector)
-			if err != nil {
-				return err
+		query, err := cascadia.Compile(sourceSelector)
+		if err != nil {
+			return err
+		}
+
+		s, ok := sourceFiles[absSource]
+		if !ok {
+			return fmt.Errorf("source file isn't found: %s", absSource)
+		}
+
+		sourceNode := query.MatchFirst(s)
+
+		dp := destinationFile[absSource]
+		for _, d := range dp {
+			destinationSelector := r.Destination.Selector
+			if destinationSelector == "" {
+				destinationSelector = sourceSelector
 			}
 
-			sourceNode := query.MatchFirst(sourceFiles[absSource])
+			keepMap := make(map[string][]*html.Node)
 
-			dp := destinationFile[absSource]
-			for _, d := range dp {
-				destinationSelector := r.Destination.Selector
-				if destinationSelector == "" {
-					destinationSelector = sourceSelector
+			for _, n := range r.Destination.Keep {
+				q, err := cascadia.Compile(n)
+				if err != nil {
+					return err
 				}
 
-				keepMap := make(map[string][]*html.Node)
+				kNode := q.MatchAll(destinationFiles[d])
+				if kNode == nil {
+					return fmt.Errorf("keep node not found: %s", n)
+				}
 
-				for _, n := range r.Destination.Keep {
-					q, err := cascadia.Compile(n)
-					if err != nil {
-						return err
-					}
+				for _, k := range kNode {
+					keepMap[n] = append(keepMap[n], k)
+				}
 
-					kNode := q.MatchAll(destinationFiles[d])
-					if kNode == nil {
-						return fmt.Errorf("keep node not found: %s", n)
-					}
+			}
 
-					for _, k := range kNode {
-						keepMap[n] = append(keepMap[n], k)
-					}
+			query, err := cascadia.Compile(destinationSelector)
+			if err != nil {
+				return err
+			}
+			destinationData := query.MatchFirst(destinationFiles[d])
 
-				}
+			if destinationData == nil {
+				return fmt.Errorf("could not find selector %s in %s", destinationSelector, d)
+			}
 
-				query, err := cascadia.Compile(destinationSelector)
+			n := engine.CloneNode(sourceNode)
+			destinationData.Parent.InsertBefore(n, destinationData)
+			destinationData.Parent.RemoveChild(destinationData)
+
+			for sel, k := range keepMap {
+				cas, err := cascadia.Compile(sel)
 				if err != nil {
 					return err
 				}
-				destinationData := query.MatchFirst(destinationFiles[d])
-
-				if destinationData == nil {
-					return fmt.Errorf("could not find selector %s in %s", destinationSelector, d)
+				x := cas.MatchAll(destinationFiles[d])
+				if x == nil {
+					return fmt.Errorf("could not find selector %s in %s", sel, d)
 				}
 
-				n := engine.CloneNode(sourceNode)
-				destinationData.Parent.InsertBefore(n, destinationData)
-				destinationData.Parent.RemoveChild(destinationData)
-
-				for sel, k := range keepMap {
-					cas, err := cascadia.Compile(sel)
-					if err != nil {
-						return err
-					}
-					x := cas.MatchAll(destinationFiles[d])
-					if x == nil {
-						return fmt.Errorf("could not find selector %s in %s", sel, d)
-					}
-
-					for _, n1 := range x {
-
-						for _, kk := range k {
+				for _, n1 := range x {
 
-							// node already removed, for example, by a previous keep
-							if n1.Parent == nil {
-								continue
-							}
+					for _, kk := range k {
 
-							n1.Parent.InsertBefore(engine.CloneNode(kk), n1)
-							n1.Parent.RemoveChild(n1)
+						// node already removed, for example, by a previous keep
+						if n1.Parent == nil {
+							continue
 						}
 
+						n1.Parent.InsertBefore(engine.CloneNode(kk), n1)
+						n1.Parent.RemoveChild(n1)
 					}
 
 				}
@@ -227,21 +231,21 @@ func SyncHtml(p string) error {
 
 		}
 
-		for p, d := range destinationFiles {
-			fp, err := os.Create(p)
-			if err != nil {
-				return err
-			}
-			err = html.Render(fp, d)
-			err2 := fp.Close()
-			if err2 != nil {
-				return err2
-			}
+	}
 
-			if err != nil {
-				return err
-			}
+	for p, d := range destinationFiles {
+		fp, err := os.Create(p)
+		if err != nil {
+			return err
+		}
+		err = html.Render(fp, d)
+		err2 := fp.Close()
+		if err2 != nil {
+			return err2
+		}
 
+		if err != nil {
+			return err
 		}
 
 	}