Traversal strategiesà la Stratego (alsoà la Strafunski and 'Scrap Your Boilerplate') provide an exceptionally versatile and uniform means of querying and transforming deeply nested and heterogeneously structured data including terms in functional programming and rewriting, objects in OO programming, and XML documents in XML programming.However, the resulting traversal programs are prone to programming errors. We are specifically concerned with errors that go beyond conservative type errors; examples we examine include divergent traversals, prematurely terminated traversals, and traversals with dead code.Based on an inventory of possible programming errors we explore options of static typing and static analysis so that some categories of errors can be avoided. This exploration generates suggestions for improvements to strategy libraries as well as their underlying programming languages. Haskell is used for illustrations and specifications with sufficient explanations to make the presentation comprehensible to the non-specialist. The overall ideas are language-agnostic and they are summarized accordingly. by ENTCS. The present paper is generally more detailed and updated, but its distinctive contribution is research on static program analysis for traversal strategies in §5; only one of the analyses was sketched briefly in the short version. The present paper also takes advantage of other previously published work by two of the present authors in so far that some of the strategy properties discovered by [30] help steering research on programming errors in the present paper. Programming errors are not systematically discussed in [30]. Also, type systems and static program analysis played no substantial role in said work. Instead, the focus was on demonstrating the potential of theorem proving in the context of traversal strategies.